iOS Newbie - Xcode 7 & iOS 9 Core Data & FetchedResultsController
2016-01-08 15:18
417 查看
参考资料
对比ios中的四种数据存储:(http://www.infoq.com/cn/articles/data-storage-in-ios/)CoreData入门:(http://blog.csdn.net/q199109106q/article/details/8563438/)
CoreData 中 relationship 的四个Delete rule 分别是什么意思:(http://www.cocoachina.com/bbs/read.php?tid-61593.html)
CoreData 多线程安全:(http://blog.csdn.net/chen505358119/article/details/9344389)
CoreData 存储用NSData 存储图片:(http://m.blog.csdn.net/blog/zhangao0086/44499405)
CoreData 任意存储类型 Transformable :(http://blog.csdn.net/likendsl/article/details/8549333)
使用FetchedResultsController 实例详解:(http://blog.csdn.net/jasonblog/article/details/8528691)
在ios9使用中的问题及解决
创建实体模型
首先在ios9中每一个实体模型被创建之后,都会出现2个”.h”文件和2个”.m”文件,总共4个而不是之前的2个。例如”Entity”名为”UserData”的模型被创建后会出现”UserData.h”,”UserData+CoreDataProperties.h”,”UserData.m”,”UserData+CoreDataProperties.m”4个文件。”Entity”中的属性和方法声明都在”UserData+CoreDataProperties.h”文件中,对应的方法的实现应该在”UserData+CoreDataProperties.m”文件中。为”Entity”的字段命名时不要用Object-C保留字,例”id”,不要用。对数据进行操作
访问数据
访问数据的步骤:定义变量,数据类型为”“Entity”名
调用”NSEntityDescription”类的”insertNewObjectForEntityForName:inManagedObjectContext:”方法初始化变量
把数据赋值给变量的属性,修改各个字段的内容
最后调用”NSManagedObjectContext”类的”save:”方法保存数据到数据库,保存到数据库,保存到数据库!!!
最后一步尤为重要,因为我们通过”insertNewObjectForEntityForName”方法得到的是空数据是在内存中的,所以最后要调用”save:”方法保存在”Core Data”数据库中。代码示例:
#import "AppDelegate.h" AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; UserData *user; user = [NSEntityDescription insertNewObjectForEntityForName:@"UserData" inManagedObjectContext:delegate.managedObjectContext]; //"uid", "uage"为"UserData"的字段 user.uid = @"Hayden"; user.uage = @"23"; [delegate.managedObjectContext save:nil];
读取数据
读取数据的步骤:初始化”NSFetchRequest”类变量
初始化”NSEntityDescription”类,调用”entityForName:inManagedObjectContext:”初始化
告诉”NSFetchRequest”要从哪个”Entity”取出数据
执行”FetchRequest”,调用”executeFetchRequset:error:”返回值是一个”NSArray”数组
利用循环逐一操作
代码示例:
NSFetchRequest *fetch = [NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserData" inManagedObjectContext:delegate.managedObjectContext]; [fetch setEntity:entity]; NSArray *users = [delegate.managedObjectContext executeFetchRequest:fetch error:nil]; for (UserData *p in users) { NSLog(@"%@, %@", p.uid, p.uage); }
附带条件查询数据
附带条件查询数据步骤:在执行”FetchRequest”之前加入:设置查询条件,初始化”NSPredicate”类,调用”predicateWithFormat:”方法
告诉”NSFetchRequest”执行什么条件
设置排序类”NSSortDescriptor”
告诉”NSFetchRequest”排序规则
代码示例:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid LIKE 'Hay*'"]; [fetch setPredicate:predicate]; NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"uid: ascending:YES]; NSArray *sortArray = [[NSArray alloc] initWithObjects:sort, nil]; [fetch setSortDescriptors:sortArray];
持续更新
相关文章推荐
- iOS9中的WebKit 与 Safari带来的惊喜
- IOS 9 UITableView整理
- Core Data
- CoreData
- coredata
- coreData
- 苹果IOS9为加强个人隐私信息保护强制HTTPS,APP开发者需申请SSL证书
- CoreData取数据提示data:<fault>且数据为空解决办法
- iOS里CoreData的 增 删 改 查
- CoreData 多线程下NSManagedObjectContext的使用
- iOS9 获取通讯录信息
- 如何结合CoreData给UITableView的section填充数据
- CoreData增删改查简单操作及多线程添加数据
- 苹果公司正式发布iOS9 beta3
- IOS之分析网易新闻存储数据(CoreData的使用,增删改查)
- core data学习笔记
- 解决适配iOS9
- CoreData的基本操作过程
- 苹果的 CoreData
- iOS9系列专题一——3D Touch