1.CoreData的专业术语
NSManagerModel | 被管理的数据模型 |
NSManngerObject | 被管理的数据对象 |
NSPersistentStoreCoordinator | 持久化存储助理 |
NSManagerContext | 被管理的数据的上下文 |
NSEntityDspcipition | 实体结构(相当于表格结构) |
NSFetchRequest | 获得数据的请求 |
NSPredicate | 谓词(筛选数据) |
后缀为.xcdatamodeld的包 | 编译后为.momd或.mom文件 |
2.手动创建CoreData的步骤:
(1).在target找到build phases中link binary with libraries条目。添加coredata.framework。
(2).新建一个new file,在coredata中找到data model,建立。
(3).在appdelegate.h中引入头文件
3.依赖关系
4.手动添加CoreData
-(NSManagedObjectContext *)getContext { //初始化一个数据模型, NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; //初始化一个持久化存储助理并关连数据模型 NSPersistentStoreCoordinator *coor = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model]; //创建数据存储路径,将sqlite数据库放置在沙盒目录的document文件夹下 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *pathfile = [path stringByAppendingPathComponent:@"coredata.sqlite"]; NSURL *url = [NSURL fileURLWithPath:pathfile]; //将路径交给持久化存储助理,让它来建立数据库 [coor addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil]; //初始化数据对象上下文并关连存储助理,完成增删改查的操作 NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType]; [context setPersistentStoreCoordinator:coor]; return context; }
这样我们就可以使用CoreData了,只需要了解了它们之间的依赖关系,便能很方便轻松的添加一个CoreData。
5.插入数据
在CoreData中插入数据首先需要在模型文件中建立表和属性。表的名称首字母必须大写。
然后
-(void)insetData { NSManagedObject *user = [NSEntityDescription insertNewObjectForEntityForName:@"Human" inManagedObjectContext:_context];//得到表的名称 [user setValue:@"moxue" forKey:@"name"];//设置表中的属性值 [user setValue:@10.0 forKey:@"age"]; BOOL choose = [_context save:nil];//保存并判断是否插入成功 if (choose) { NSLog(@"insert success"); }else{ NSLog(@"insert failed"); } }
6.查看添加的数据
-(void)fetchData { NSFetchRequest *fetch = [[NSFetchRequest alloc]init];//获得数据请求 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context];//得到对应的表 [fetch setEntity:entity];//添加表到请求中 NSArray *array = [_context executeFetchRequest:fetch error:nil];//得到数据数组并遍历 for (NSManagedObject *object in array) { NSLog(@"%@",[object valueForKey:@"age"]); } }
7.修改添加的数据
-(void)updateData { //通过查看先得到要修改的数据 NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context]; //通过谓词来精确定位数据 NSPredicate *condition = [NSPredicate predicateWithFormat:@"name = 'moxue'"]; [fetch setPredicate:condition]; [fetch setEntity:entity]; //遍历数组并修改 NSArray *array = [_context executeFetchRequest:fetch error:nil]; for (NSManagedObject *object in array) { [object setValue:@28 forKey:@"age"]; } [_context save:nil];//保存 }
8.删除数据
-(void)deleteData { //首先查看数据 NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context]; [fetch setEntity:entity]; //通过谓词条件来筛选 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = '10'"]; [fetch setPredicate:predicate]; //删除得到的数据并保存 NSArray *array = [_context executeFetchRequest:fetch error:nil]; for (NSManagedObject *object in array) { [_context deleteObject:object]; [_context save:nil]; } }