您的位置:首页 > 移动开发 > IOS开发

iOS开发 - MagicalRecord

2016-03-25 11:26 375 查看
常用方法

•   将字典导入model 类似于JSONModel的功能
News * model = [News MR_importFromObject:dict];

·   将数组导入model 返回model数组 类似于JSONModel的功能
self.dataArr = [NSMutableArray arrayWithArray:[News MR_importFromArray:arr]];

·   查询最大/最小值
Person * person = [Person MR_findFirstOrderedByAttribute:@"age" ascending:NO];


使用过程

1.导入第三方

//初始化

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@“coreData文件名”];

2.创建coredata文件

3.#import “MagicalRecord.h”

4.增

Person * person = [Person MR_createEntity];
//要存储的具体的数据
person.age = @(arc4random()%20 +10);
person.name =@"名字";
//保存
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];


5.删

//根据条件 获取要删除的数据
NSArray * arr = [Person MR_findByAttribute:@"age" withValue:@(21)];
for (Person * person in arr) {
//删除
[person MR_deleteEntity];
break;
}
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];


6.改

Person * person = [Person MR_findFirst];
//修改
person.name = @"小米";
person.age = @(4);
//同步
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];


7.查

NSArray * allArr = [Person MR_findAll];
for (Person * person in allArr) {
NSLog(@" %@ %d ",person.name,person.age.integerValue);
}
NSPredicate * pred = [NSPredicate predicateWithFormat:@"%K>%@",@"age",@(20)];
[Person MR_findAllWithPredicate:pred];


缓存实例

1.数据源加载时 :  懒加载方法中为获取本地缓存文件

-(NSMutableArray *)dataArr{
if (!_dataArr) {
NSArray * arr = [News MR_findAll];
_dataArr = [NSMutableArray arrayWithArray:arr];
}
return _dataArr;

2.请求数据时 :

创建model时应该创建实体
News * model = [News MR_createEntity];

当数据请求下来的时候 应该根据唯一标识(主键)来判断是否已经缓存
NSArray * arrRes = [News MR_findByAttribute:@"docid" withValue:dict[@"docid"]];
if (!arrRes.count) {
//如果查询docid来判断 该数据是否已经存储了
//如果没有存储 就插入数据
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
}
第一次数据请求结束时应该清空懒加载时数据源中的数据


数据结构变更时引发crash,解决方案:

/article/2894511.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: