美文网首页
Xcode8使用CoreData

Xcode8使用CoreData

作者: 小鲜肉老腊肉都是肉 | 来源:发表于2019-10-14 10:29 被阅读0次

    1.新建项目,勾选Use Core Data

    image

    2.选中xxx.Xcdatamodeld文件,点击序号2处的按钮,会在3处生成实体,修改实体的名字。点击4处的+新建属性(也可以点击右下角的Add

    Attibute来新建属性),修改属性的类型。

    image

    3.在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);

    }

    相关文章

      网友评论

          本文标题:Xcode8使用CoreData

          本文链接:https://www.haomeiwen.com/subject/ghglmctx.html