【问题标题】:Core Data Project template questions in XCode 4XCode 4 中的核心数据项目模板问题
【发布时间】:2011-07-26 10:43:09
【问题描述】:
我在 XCode 4 中使用 Core Data 创建了一个基于窗口的 iPhone 应用程序。关于核心数据位,我有一些问题:
在应用程序委托头文件中没有3个核心数据属性不作为实例变量出现?即@interface 部分中没有列出任何变量,但是它们有属性并且它们在实现文件中合成。这是正确的吗?
在默认的持久化机制SQLite中?我在“persistentStoreCoordinator”方法中看到 storeURL 是“...URLByAppendingPathComponent:@"CoreDataProjectTemplate.sqlite"
实际的 sqlite 持久性文件将在何时何地创建?我在模板的代码中看不到这是哪里?你必须添加自己的代码来创建它吗?
【问题讨论】:
标签:
iphone
xcode
core-data
xcode4
xcode-template
【解决方案1】:
现代 Objective-C 运行时不仅可以合成访问器,还可以合成属性存储。如果您愿意,您可以自己指定支持您的属性的 ivars,或者您可以让运行时自行解决。
SQLite 是 iOS 中唯一支持 Core Data 的后备存储。
如果我没记错的话,当托管对象上下文被保存时,该文件将被创建(如果它不存在)。该 URL 在添加到持久存储协调器时与持久存储关联。
【解决方案2】:
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 参数附加持久存储的文件名来构建的.您可以根据需要修改它以添加子文件夹或更改文件名。
【解决方案3】:
3) storeURL 是 Core Data 数据库的名称和位置。如果你想把它放在其他地方,只需更改基本目录。您可能需要考虑应用程序支持目录。