如何从我的托管对象模型中获取Core Data以创建SQLite DB

时间:2010-04-08 02:34:29

标签: iphone sqlite core-data

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

谁能告诉我怎么样?

4 个答案:

答案 0 :(得分:5)

  

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

你读过哪本书?我想你总会找到一些奇怪的例子......无论如何。

这很容易。

  1. 创建NSPersistentStoreCoordinator并将其与addPersistentStoreWithType:configuration:URL:options:error:绑定到文件名。 (此阶段不必存在该文件。也许这部分让您感到困惑。您需要指定稍后保存数据的文件名。)
  2. 获取与其关联的NSManagedObjectContext
  3. 在此阶段,核心数据的设置已准备就绪。接下来,

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

      在此阶段,将一个对象插入上下文,但不会保存到磁盘。当你完成后,你做

      1. [moc save:&error];
      2. 这将在磁盘上创建SQL文件。您应该检查Apple本身提供的示例,这些示例已经在此处与其他海报相关联。另请阅读Apple自己提供的教程like this。他们非常好。

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

答案 1 :(得分:1)

您可以执行以下操作来设置持久性存储协调器&创建数据库(代码取自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]);
}

答案 2 :(得分:1)

SQLite是自动创建的,但仅当数据库尚不存在时

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

答案 3 :(得分:0)

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