【发布时间】:2010-04-08 02:34:29
【问题描述】:
我一直在纠结于 Core Data。我查看了示例和文档,但它们似乎都将现有的 SQLite DB 复制到工作目录中。我已经定义了我的数据模型,只希望 Core Data 创建一个 SQLite DB。然后我将在我的应用程序中填充数据库。
谁能告诉我怎么做?
【问题讨论】:
我一直在纠结于 Core Data。我查看了示例和文档,但它们似乎都将现有的 SQLite DB 复制到工作目录中。我已经定义了我的数据模型,只希望 Core Data 创建一个 SQLite DB。然后我将在我的应用程序中填充数据库。
谁能告诉我怎么做?
【问题讨论】:
我查看了示例和文档,但它们似乎都将现有 SQLite DB 复制到工作目录中。
你读了哪本书?我猜你不知何故只找到了一些奇怪的例子......无论如何。
这很容易。
NSPersistentStoreCoordinator 并将其与addPersistentStoreWithType:configuration:URL:options:error: 的文件名绑定。 (该文件在这个阶段不必存在。可能这部分让您感到困惑。您需要指定稍后保存数据的文件名。)NSManagedObjectContext。在这个阶段,Core Data 的设置已经准备就绪。接下来,
NSEntityDescription。[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:moc]创建对象
在这个阶段,一个对象被插入到上下文中,但不保存到磁盘。完成后,您就可以了
[moc save:&error];这将在磁盘上创建 SQL 文件。您应该检查 Apple 本身提供的示例,此处已由其他海报链接。另请阅读 Apple 自己提供的教程like this。他们很好。
另外,买 Marcus Zarra 的Core Data Book,非常好,帮了我很多。
【讨论】:
您执行这样的操作来设置持久存储协调器并创建数据库(代码取自 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]);
}
【讨论】:
managedObjectContext save:?也许它不会创建数据库,直到有实际数据保存在其中。只是“构建”绝对不会创建数据库;它将在运行时在您的应用程序中创建。
SQLite 是自动创建的,但前提是数据库不存在
从 iPhone / 模拟器中删除应用程序以清理它
【讨论】:
最简单的方法是使用包含 Core Data 的 Xcode 模板来生成已配置的项目。查看persistentStoreCoordinator 方法以了解它们如何定义持久存储的位置和类型。 Core Data Programming Guide 也有说明。默认值为 XML,但您可以轻松地将其更改为 NSSQLiteStoreType。您的程序将在第一次运行时生成一个新数据库。
【讨论】: