0x01 概述
参考:http://www.jianshu.com/p/4a36acc32d9b
使用coredata的多吗,好用吗,调研才有发言权,开干。
0x02 网上搜索概述
总体使用较少
优点:1 不直接操作sqlte语句,容易使用。 2 和系统接口结合。 3 分线程主线程操作方便。
缺点:1 多个表关联时不好操作。2数据库升级困难。3 学习成本较高。
0x03 开始入坑
A 创建Data Mode
坑的地方是默认是swift,没有oc选项,要想使用oc要创建完成后手动修改,修改方法如下图:
B 为 data mode 创建NSManagedObject
新建文件里面没有那个选项了,what fack,没了,怎么创建。
网上搜了下,隐藏在其他位置了,如下图:
创建完成后,该松口气了,然而实际他还是会让你紧张的。
编译报错如下:
懵逼了吧
搜索之后发现是xcode的bug
https://stackoverflow.com/questions/40460307/duplicate-symbol-error-when-adding-nsmanagedobject-subclass-duplicate-link
C 保存数据
1.创建实体,并为实体属性赋值
Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
p.name = [NSString stringWithFormat:@"大倩倩%d",arc4random()%10];
p.age = [NSString stringWithFormat:@"%d",arc4random()%60];
2.保存数据
[context save:nil];
***************************************************************
3.查询
建立请求
NSFetchRequest *request = [[NSFetchRequest alloc] init] ;
读取实体
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
请求连接实体
request.entity = entity;
遍历所有实体,将每个实体的信息存放在数组中
NSArray *arr = [context executeFetchRequest:request error:nil];
for (Person *p in arr)
{
NSLog(@"name=%@,age=%@", p.name,p.age);
}
D 读取数据
NSFetchRequest*request = [[NSFetchRequest alloc]init];
NSEntityDescription*entity = [NSEntityDescription entityForName:@"Person"inManagedObjectContext:context];
request.entity= entity;
NSArray*arr = [context executeFetchRequest:requesterror:nil];
for(Person*pinarr) {
NSLog(@"name is: %@",p.name);
}
E 修改
//设置过滤条件
NSPredicate*predicate = [NSPredicate predicateWithFormat:@"name = %@",@"Tommy"];
request.predicate= predicate;
NSArray*arr = [context executeFetchRequest:requesterror:nil];
for(Person*pinarr) {
p.name=@"Mini Tommy";
}
[context save:nil];
F 删除
先查询出符合条件的数据,方法参考D读取数据
for(Person*pinarr) {
[context deleteObject:p];
}
[contextsave:nil];
0x04 总结
总体感觉使用比直接使用sql简单些。
对于表的关联,数据的升级还没试验。