IOS开发 core data 简单使用和注意
来源:互联网 发布:warframe重置端口 编辑:程序博客网 时间:2024/05/22 23:18
1. 创建CoreData 命名Model
创建方式:command+N->ios/coredate->DataModel
2.生成NSManagedObject SubClass
创建方式:command+N->ios/coredate->NSManagedObject SubClass
3.CoreData简单使用
CoreData常用的几个类
- NSManagedObjectContext MOC 托管对象上下文,各种操作都需要这个类
- NSPersistentStoreCoordinator PSC 持久化调度器,协调上下文和存储区区之间关系,数据库路径,数据库升级都要通过psc配置
- NSManagedObjectModel MOM 托管对象模型,对应一个模型文件,存储数据库中的数据结构
CoreData初始化
// 初始化上下文 NSManagedObjectContext *_MainContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType]; // 初始化模型文件 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 持久化存储调度器 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; //设置数据库存储路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"%@",doc); NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"]; NSError *error = nil; //当数据结构发生变化时,用户app只能升级,不能卸载重装,需要配置一下 NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; //数据存储的类型 数据库存储路径 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:optionsDictionary error:&error]; _MainContext.persistentStoreCoordinator = store;
CoreData查询
<pre name="code" class="objc"> NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; //设置查询条件 fetchRequest.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"hxID='%@'",username]]; //设置查询结果数量为20条 [fetchRequest setFetchLimit:20]; //设置查询结果偏移量 [fetchRequest setFetchOffset:10]; //设置要查询Entity名称,上下文 NSEntityDescription *entity = [NSEntityDescription entityForName:@"HxInfo" inManagedObjectContext:cusMoc1]; [fetchRequest setEntity:entity]; //开始查询, NSError *error; NSArray *fetchedObjects = [cusMoc1 executeFetchRequest:fetchRequest error:&error]; if (!error) { NSLog(@"查询到数据了"); }
CoreData插入数据
//初始化一个Entity类 NSError *error; GroupInfoM *myGroupInfo = [NSEntityDescription insertNewObjectForEntityForName:@"HxInfo" inManagedObjectContext:_MainContext]; //给对象赋值 myGroupInfo.groupId = @"1234"; myGroupInfo.groupName = @"快乐的生活"; //保存到数据库 [cusMoc1 save:&error]; if (!error) { NSLog(@"保存成功"); }
CoreData多线程应用
- 当写入和查询同时进行,尤其是同时对一个Entity进行操作时,会造成app闪退,原因是:你查询这条数据后,Entity同一条数据内容更新了
- 苹果官方给的解决方案,每个线程有自己独立的MOC,所有的MOC公用一个PSC
- 说一下是我自己项目的,新建一个主的MOC,执行异步的插入,删除,更新操作,多个子的MOC,执行查询
//从当前调用事件的线程中得到对应的NSManagedObjectContext NSManagedObjectContext* threadContext = [[NSThread currentThread].threadDictionary objectForKey:[NSThread currentThread].name]; //第一次调用时,创建一个新的NSManagedObjectContext if (!threadContext) { //疑问1:NSPrivateQueueConcurrencyType这个起什么作用 threadContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType]; //设置threadContext的父的MOC [threadContext setParentContext:_MainContext]; //把threadContext放入到对应的线程中 [[NSThread currentThread].threadDictionary setObject:threadContext forKey:[NSThread currentThread].name]; } //查询使用threadContext
2 0
- IOS开发 core data 简单使用和注意
- ios简单使用core data
- ios简单使用core data
- iOS-简单使用core data
- ios简单使用core data
- iOS软件开发 Core Data的使用
- [ios开发基础之 Core Data[2]]如何使用Core Data – 预加载和引入数据
- iOS Core Data 简单封装
- iOS Core Data简单演练
- [IOS]Core Data简单实例(使用Xcode7)
- iOS开发中,Core Data的使用笔记(一)
- Core Data 的简单使用
- iOS开发系列--数据存取(SQLite和Core Data)
- iOS Core Data的使用
- IOS中core data使用
- iOS Core Data框架使用
- iOS Core Data的使用
- iOS数据 - Core Data使用
- 仿网易新闻的顶部导航指示器
- BestCoder Round #25
- PAT-A 1023. Have Fun with Numbers
- 更新UI的四种方式分析
- Eclipse 启动优化问题(详细)
- IOS开发 core data 简单使用和注意
- Java类装载器研究
- 博弈小结
- 北大学习总结
- 线程池的大小应该设为多少
- 设计模式-创建型-抽象工厂模式(Abstract Factory)
- 【Git/Github学习笔记】Git常用命令(代码冲突二)
- PAT-A 1027. Colors in Mars
- 糗事百科简易版(网页提交数据通过服务器处理显示到手机上)