Xcode8使用CoreData
1.新建项目,勾选Use Core Data
image2.选中xxx.Xcdatamodeld文件,点击序号2处的按钮,会在3处生成实体,修改实体的名字。点击4处的+新建属性(也可以点击右下角的Add
Attibute来新建属性),修改属性的类型。
image3.在Xcode8下,xcode会自动生成数据库了,可以直接通过#import"实体名+CoreDataClass.h"导入使用了。
旧版本Xcode,需要进行下面的操作:选中xxx.Xcdatamodeld,点击Editor,选择Creat NSManagerObject Subclass,会在4处自动生成四个文件,然后通过#import导入需要使用CoreData的类。
image上面这一步也可以在Xcode8中操作,操作完会在上图的4处生成四个文件,但是按照上面的步骤操作完后编译会报错,按照下图设置3处为Manrual/None。
image需要注意的是:在Xcode8下,不执行第3步,而是直接通过#import使用也可以,只不过不会在工程中生成四个文件;在旧版本Xcode通过第三步生成的四个文件为“实体名”.h、“实体名”.m、“实体名+CoreDataClass”.h、“实体名+CoreDataClass”.m,而在Xcode8中通过第3步生成的四个文件名为“实体名+CoreDataProperties”.h、“实体名+CoreDataProperties”.m、“实体名+CoreDataClass”.h、“实体名+CoreDataClass”.m。
4.在使用CoreData的类导入头文件使用CoreData
增
//取到AppDelegate对象
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
//创建一个实体类的对象
Student*Student=NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:appDelegate.persistentContainer.viewContext];
//赋值
Student.age =
18; Student.name = @"陈冠希";Student.sex = @"女";
//保存数据
[appDelegate saveContext];
删
AppDelegate * appDelegate = [UIApplicationsharedApplication].delegate;
//创建一个请求查询对象
NSFetchRequest * request = [[NSFetchRequestalloc]initWithEntityName:@"Student"];
//保存查询结果
NSArray * resArr = [appDelegate.persistentContainer.viewContextexecuteFetchRequest:request error:NULL];
//遍历来删除需要删除的数据
for (Student * stu inresArr) {
//查询过程可以用for循环或者谓词来实现--此处查询用for循环
if ([stu.sex isEqualToString:@"女"]){
[appDelegate.persistentContainer.viewContextdeleteObject:stu];}}
改
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
//创建一个请求查询对象
NSFetchRequest* request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
//查询条件
NSPredicate*
predicate=[NSPredicate predicateWithFormat:@"name==%@",@"陈冠希"];
[requestsetPredicate:predicate];
//保存查询结果--//查询过程可以用for循环或者谓词来实现--此处查询用谓词
NSArray* resArr = [appDelegate.persistentContainer.viewContextexecuteFetchRequest:request error:NULL];
//更新
for (Student*user in resArr) {
[user setSex:@"男"];}
//保存数据--貌似不用保存也可以
[appDelegate saveContext];
查—这儿没有设置查询条件,可以用谓词设置查询条件查询
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
NSFetchRequest* request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
NSArray* resArr = [appDelegate.persistentContainer.viewContextexecuteFetchRequest:request error:NULL];
for (Student *obj in resArr) {
NSLog(@"姓名:%@,年龄:%d,性别:%@",obj.name,obj.age,obj.sex);
}