1

我在 XCode 4 中使用 Core Data 创建了一个基于 Window 的 iPhone 应用程序。关于核心数据位,我有一些问题:

  1. 在应用程序委托头文件中没有3个核心数据属性不作为实例变量出现?即@interface 部分中没有列出任何变量,但它们有属性,并且它们在实现文件中合成。它是否正确?

  2. 在默认的持久化机制 SQLite 中?我在“persistentStoreCoordinator”方法中看到 storeURL 是“...URLByAppendingPathComponent:@"CoreDataProjectTemplate.sqlite"

  3. 实际的 sqlite 持久性文件将在何时何地创建?我在模板的代码中看不到这是哪里?您是否必须添加自己的代码来创建它?

4

3 回答 3

2
  1. 现代的 Objective-C 运行时不仅可以合成访问器,还可以合成属性的存储。如果您愿意,您可以自己指定支持您的属性的 ivars,或者您可以让运行时自行解决。

  2. SQLite 是 iOS 中唯一支持 Core Data 的后备存储。

  3. 如果我没记错的话,当托管对象上下文被保存时,该文件将被创建(如果它不存在)。当 URL 添加到持久存储协调器时,它与持久存储相关联。

于 2011-03-30T21:51:22.937 回答
1

3) storeURL 是 Core Data 数据库的名称和位置。如果你想把它放在其他地方,只需更改基本目录。您可能需要考虑应用程序支持目录。

于 2011-03-30T21:57:54.947 回答
1

1 我假设您指的是以下内容:

@synthesize managedObjectContext=__managedObjectContext;
@synthesize managedObjectModel=__managedObjectModel;
@synthesize persistentStoreCoordinator=__persistentStoreCoordinator;

这种格式允许您为不同名称的变量创建访问器(即,getter / setter 访问器名称可以与变量名称不同)。如果变量之前没有定义,那么综合操作将自动为您创建一个综合实例变量。

2 正如您从文件名中推断的那样,CoreData 的默认持久存储是 SQLite;但是它不限于这一种类型。第一次创建持久存储时,您向persistentStoreCoordinator 发送消息,在其中将addPersistentStoreWithType 设置为以下之一:

NSSQLiteStoreType
NSBinaryStoreType
NSInMemoryStoreType

老实说,除非你有充分的理由改变它,否则你最好还是坚持使用 SQLite。

3 持久存储的位置 URL 是通过建立应用程序正在其中执行的目录(向 applicationDocumentsDirectory 发送消息 - 写在代码中的其他位置)然后通过 URLByAppendingPathComponent 参数将持久存储的文件名附加到它来构建的。您可以修改它以添加子文件夹或根据需要更改文件名。

于 2011-03-30T22:09:48.190 回答