【问题标题】:How do I get Core Data to create an SQLite DB from my Managed Object Model如何获取 Core Data 以从我的托管对象模型创建 SQLite DB
【发布时间】:2010-04-08 02:34:29
【问题描述】:

我一直在纠结于 Core Data。我查看了示例和文档,但它们似乎都将现有的 SQLite DB 复制到工作目录中。我已经定义了我的数据模型,只希望 Core Data 创建一个 SQLite DB。然后我将在我的应用程序中填充数据库。

谁能告诉我怎么做?

【问题讨论】:

    标签: iphone sqlite core-data


    【解决方案1】:

    我查看了示例和文档,但它们似乎都将现有 SQLite DB 复制到工作目录中。

    你读了哪本书?我猜你不知何故只找到了一些奇怪的例子......无论如何。

    这很容易。

    1. 创建一个NSPersistentStoreCoordinator 并将其与addPersistentStoreWithType:configuration:URL:options:error: 的文件名绑定。 (该文件在这个阶段不必存在。可能这部分让您感到困惑。您需要指定稍后保存数据的文件名。)
    2. 获取与之关联的NSManagedObjectContext

    在这个阶段,Core Data 的设置已经准备就绪。接下来,

    1. 为您的实体创建一个NSEntityDescription
    2. 通过[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:moc]创建对象

    在这个阶段,一个对象被插入到上下文中,但不保存到磁盘。完成后,您就可以了

    1. [moc save:&error];

    这将在磁盘上创建 SQL 文件。您应该检查 Apple 本身提供的示例,此处已由其他海报链接。另请阅读 Apple 自己提供的教程like this。他们很好。

    另外,买 Marcus Zarra 的Core Data Book,非常好,帮了我很多。

    【讨论】:

    • 虞姬,谢谢。我误解了,我认为 PersistentStoreCoordinator 在磁盘上创建了数据库。现在一切都好。
    【解决方案2】:

    您执行这样的操作来设置持久存储协调器并创建数据库(代码取自 Apple “Recipes”示例应用程序)

    NSString *storePath = [[self applicationDocumentsDirectory] 
                            stringByAppendingPathComponent:@"MyDB.sqlite"];
    
    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
    
    NSError *error;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]    
                                 initWithManagedObjectModel: [self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }
    

    【讨论】:

    • 大卫,我做了所有这些,但 applicationDocumentsDirectory 中没有 sqlite DB。我做了一个清理所有目标,清空所有缓存并删除 BUILD 目录。然后 BUILD 但没有 sqlite DB。
    • 您是否创建了一些托管对象并称为managedObjectContext save:?也许它不会创建数据库,直到有实际数据保存在其中。只是“构建”绝对不会创建数据库;它将在运行时在您的应用程序中创建。
    • 就是这样。谢谢,很简单。
    【解决方案3】:

    SQLite 是自动创建的,但前提是数据库不存在

    从 iPhone / 模拟器中删除应用程序以清理它

    【讨论】:

      【解决方案4】:

      最简单的方法是使用包含 Core Data 的 Xcode 模板来生成已配置的项目。查看persistentStoreCoordinator 方法以了解它们如何定义持久存储的位置和类型。 Core Data Programming Guide 也有说明。默认值为 XML,但您可以轻松地将其更改为 NSSQLiteStoreType。您的程序将在第一次运行时生成一个新数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 2015-02-10
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        相关资源
        最近更新 更多