您的位置:首页 > Web前端

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];


持续更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Xcode7 iOS9 CoreData