zoukankan      html  css  js  c++  java
  • EverBox开发笔记4如何使用Core Data

    在这里有篇新手教程,教你怎么在iOS中使用Core Data

    教程写的不错,非常详细, 通过这个例子,可以看到在iOS下使用Core Data存储结构化数据是多么容易,Core Data隐藏了数据存储的细节,在应用层上,开发者只需:

    1,这可以通过图形化的工具来建立数据结构和描述,Core Data中称为实体——Entity。

    2,为这个实体,从NSManagedObject中子类化一个对象(测试用的是Event对象),这个对象就代表一条数据库内的记录。

    3,添加数据:

    Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" 
                                                 inManagedObjectContext:managedObjectContext];
    [managedObjectContext save:&error];
    [eventsArray insertObject:event atIndex:0];
    4,删除数据:
    NSManagedObject *eventToDelete = [eventsArray objectAtIndex:indexPath.row];
    [managedObjectContext deleteObject:eventToDelete];
    [managedObjectContext save:&error]
    5,获取数据也就是从Store中查询数据,重点是NSFetchRequest类,以及设置好它的三个属性:
    1,
    entity,从哪个库里查。
    2,sortDescriptor,如何排序。
    3,predicate,查询条件。(查询条件会最终被翻译成SQL或其他什么东西,取决于底层用的库类型)
    6,执行查询:
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

    最后需要指出一点,在创建完界面后,教程让我们运行一下,看看目前为止的成果,但这个步骤会引入一个bug:

    当你进行到下下一节,并运行App后,程序会终止在Appdelegate的persistentStoreCoordinator中并报错:

    The model used to open the store is incompatible with the one used to create the store。

    作为一个笨人,首先怀疑自己哪个步骤做错了,于是对照教程检查一遍,没有发现问题。

    作为一个笨人,又把教程中的例程运行一遍,运行正常,没有发现问题,于是我就更加相信教程没错了。

    作为一个笨人,又从字面意思分析:“打开store用到的model,跟创建store用到的model不兼容”,于是将创建的Entity删除再创建了一遍,运行仍然报错。

    作为一个笨人,终于想到了Google,于是很快找到了解决办法:删除App,重新运行。

    大概猜想一下:按照教程工作到一半时运行App,会创建store,此时未创建Entity,但可能会创建store。接着往下按照教程要求创建Entity后,再运行App,这时打开的旧store就跟新的Entity不兼容了。

  • 相关阅读:
    k8spod资源的基础管理操作
    k8s名称空间资源
    bzoj5011: [Jx2017]颜色
    bzoj5010: [Fjoi2017]矩阵填数
    bzoj5008: 方师傅的房子
    bzoj5007: TCP协议
    bzoj5003: 与链 5004: 开锁魔法II 5005:乒乓游戏
    bzoj5020: [THUWC 2017]在美妙的数学王国中畅游
    bzoj5006: [THUWC2017 Bipartite]随机二分图
    bzoj4480: [Jsoi2013]快乐的jyy
  • 原文地址:https://www.cnblogs.com/tara/p/2570121.html
Copyright © 2011-2022 走看看