CoreData的增删改查
来源:互联网 发布:淘宝假货改进 编辑:程序博客网 时间:2024/05/04 06:14
来源:http://www.cnblogs.com/ZeroHour/p/3671346.html
近几天一直在使用 CoreData, 以前觉得它是一门高深的技术, 等自己用了之后才觉得,它是那么的平易近人.
一: 首先我们要在创建应用程序的时候勾选 UseCoreData 选项, 当然也可以自己后期创建.
系统会生成如下AppDelegate.h的文件
1 #import <UIKit/UIKit.h> 2 3 @interface AppDelegate : UIResponder <UIApplicationDelegate> 4 5 @property (strong, nonatomic) UIWindow *window; 6 7 // 上下文对象 8 @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 9 // 数据模型10 @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;11 // 协调者12 @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;13 14 // 在应用程序终止的时候会调用该方法15 - (void)saveContext;16 // 得到应用程序的 Documents 路径, 将数据库存在此目录下17 - (NSURL *)applicationDocumentsDirectory;18 19 @end
AppDelegate.m 文件会多出如下几个方法:
1 - (void)applicationWillTerminate:(UIApplication *)application 2 { 3 // 保存上下文对象的方法在此调用(程序结束的时候) 4 [self saveContext]; 5 } 6 7 #pragma makr - save context 8 - (void)saveContext 9 {10 // 程序意外终止就会调用此方法11 NSError *error = nil;12 NSManagedObjectContext *managedObjectContext = self.managedObjectContext;13 if (managedObjectContext != nil) {14 if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {15 NSLog(@"Unresolved error %@, %@", error, [error userInfo]);16 abort();17 } 18 }19 }20 21 #pragma mark - Core Data stack22 - (NSManagedObjectContext *)managedObjectContext23 {24 // 创建上下文对象25 if (_managedObjectContext != nil) {26 return _managedObjectContext;27 }28 29 NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];30 if (coordinator != nil) {31 _managedObjectContext = [[NSManagedObjectContext alloc] init];32 [_managedObjectContext setPersistentStoreCoordinator:coordinator];33 }34 return _managedObjectContext;35 }36 37 - (NSManagedObjectModel *)managedObjectModel38 {39 // 创建数据模型40 if (_managedObjectModel != nil) {41 return _managedObjectModel;42 }43 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo02" withExtension:@"momd"];44 _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];45 return _managedObjectModel;46 }47 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator48 {49 // 创建协调者,也就是存储区50 if (_persistentStoreCoordinator != nil) {51 return _persistentStoreCoordinator;52 }53 54 NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataDemo02.sqlite"];55 56 NSError *error = nil;57 _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];58 if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {59 NSLog(@"Unresolved error %@, %@", error, [error userInfo]);60 abort();61 } 62 63 return _persistentStoreCoordinator;64 }65 66 #pragma mark - Application's Documents directory67 - (NSURL *)applicationDocumentsDirectory68 {69 // 得到 Documents 目录70 return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];71 }
这就是系统为我们搭建好的框架,我们只需要进行数据操作便可.
二: 1)我们要在 CoreData 模板下添加实体以及实体的属性,如图:
2) 新建文件, 集资选择 CoreData-->NSManagedObjectSubClass, 选择为 Person 实体创建类便可.如下:
Person.h 文件
1 #import <Foundation/Foundation.h> 2 #import <CoreData/CoreData.h> 3 4 5 @interface Person : NSManagedObject 6 7 @property (nonatomic, retain) NSString * firstName; 8 @property (nonatomic, retain) NSString * lastName; 9 @property (nonatomic, retain) NSNumber * age;10 11 @end
Person.m 文件
1 #import "Person.h" 2 3 4 @implementation Person 5 6 @dynamic firstName; 7 @dynamic lastName; 8 @dynamic age; 9 10 @end
现在我们的环境已经准备完毕:
三: 1) 写入数据
1 - (void)insertData 2 { 3 // 创建实体 4 Person * newPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 5 // 赋值 6 if (newPerson != nil) { 7 newPerson.firstName = @"Zero"; 8 newPerson.lastName = @"Hour"; 9 newPerson.age = [NSNumber numberWithInt:20];10 11 // 保存数据12 NSError * savingError = nil;13 if ([self.managedObjectContext save:&savingError]) {14 NSLog(@"success");15 }else {16 NSLog(@"failed to save the context error = %@", savingError);17 }18 }else {19 NSLog(@"failed to create the new person");20 }21 }
2) 删除数据
1 - (void)deleteData 2 { 3 NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 4 NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 5 [fetchRequest setEntity:entity]; 6 7 NSError * requestError = nil; 8 NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError]; 9 10 if ([persons count] > 0) {11 12 Person * lastPerson = [persons lastObject];13 // 删除数据14 [self.managedObjectContext deleteObject:lastPerson];15 if ([lastPerson isDeleted]) {16 NSLog(@"successfully deleted the last person");17 NSError * savingError = nil;18 if ([self.managedObjectContext save:&savingError]) {19 NSLog(@"successfully saved the context");20 21 }else {22 NSLog(@"failed to save the context error = %@", savingError);23 }24 }else {25 26 NSLog(@"failed to delete the last person");27 }28 }else {29 NSLog(@"could not find any person entity in the context");30 }31 }
3) 更改数据
1 - (void)updateData 2 { 3 NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 4 NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 5 [fetchRequest setEntity:entity]; 6 7 NSError * requestError = nil; 8 NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError]; 9 10 if ([persons count] > 0) {11 12 Person * lastPerson = [persons lastObject];13 // 更新数据14 lastPerson.firstName = @"Hour";15 lastPerson.lastName = @"Zero";16 lastPerson.age = @21;17 18 NSError * savingError = nil;19 if ([self.managedObjectContext save:&savingError]) {20 NSLog(@"successfully saved the context");21 22 }else {23 NSLog(@"failed to save the context error = %@", savingError);24 }25 26 27 }else {28 NSLog(@"could not find any person entity in the context");29 }30 }
4) 查询数据
1 - (void)findData 2 { 3 NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 4 NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; 5 [fetchRequest setEntity:entity]; 6 7 // 设置排序条件 8 NSSortDescriptor * ageSort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES]; 9 NSSortDescriptor * firstNameSort = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];10 NSArray * sortDescriptors = @[ageSort, firstNameSort];11 [fetchRequest setSortDescriptors:sortDescriptors];12 13 // 设置查询条件14 NSPredicate * agePre = [NSPredicate predicateWithFormat:@"age > 18"];15 [fetchRequest setPredicate:agePre];16 17 NSError * requestError = nil;18 NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError];19 int counter = 0;20 for (Person * thisPerson in persons) {21 NSLog(@"person-->%d, firstName = %@, lastName = %@, age = %d", counter, thisPerson.firstName, thisPerson.lastName, [thisPerson.age intValue]);22 counter ++;23 }24 }
好了自己目前只学习了这么多, CoreData 是非常好用的, 我会更加深入的去学习的,再见!
0 0
- CoreData的增删改查
- CoreData的增删改查
- coreData增删改查
- CoreData增删查改
- CoreData“增删改查”
- CoreData 增删查改
- (CoreData的使用,增删改查)
- iOS CoreData的使用,增删改查
- CoreData的增删改查--可行
- Coredata数据库的增删改查
- coreData增删改查正则
- 06-CoreData增删改查
- iOS CoreData增删改查
- Swift CoreData增删改查
- swift3 CoreData增删改查
- CoreData中的数据处理的一些问题 增删改查
- Xib处理coreData数据库的增删改查常见错误
- iOS学习之CoreData的增删改查
- JNI文件的创建方法
- Nhibernate 使用
- MySQL常用命令和图形界面工具
- 丰富你的程序,运用手机多媒体
- Jira平台数据自动化获取(二)--JQL语句
- CoreData的增删改查
- AlphaGo关键技术,Deep Learning(深度学习)<1>
- 数据结构(8)线性表之静态链表
- python学习笔记(6)-高级特性(二)-迭代
- 字符设备驱动
- No enclosing instance of the type RegisterActivity is accessible
- Java Web Session 登录实例
- 发现大量的TIME_WAIT解决办法
- 蓝桥杯 密码发生器