【发布时间】:2014-05-31 19:42:26
【问题描述】:
当您使用核心数据在 Xcode 上启动一个新的 iOS 项目时,它会初始化一个扩展名为 .sqlite 的数据库。当您为 OSX 的新项目执行相同操作时,数据库的扩展名为 .storedata。
这两者有什么区别吗?谢谢。
【问题讨论】:
当您使用核心数据在 Xcode 上启动一个新的 iOS 项目时,它会初始化一个扩展名为 .sqlite 的数据库。当您为 OSX 的新项目执行相同操作时,数据库的扩展名为 .storedata。
这两者有什么区别吗?谢谢。
【问题讨论】:
iOS 上的 CoreData 仅支持 sqlite 持久存储。 OS X 上的 CoreData 支持多种格式,包括 sqlite 和 xml,默认的持久存储是基于 xml 的。因此 .sqlite 是 CoreData 的 sqlite 持久存储,而 .storedata 是 xml 持久存储。
为了扩展答案,sqlite 持久存储允许部分和增量加载模型,而 xml 持久存储只允许(要求)整体加载模型。默认值的差异可能是由两个平台上不同的内存可用性来解释的。由于典型 Mac 上有更多可用内存,因此一次加载所有内容可提高整体性能。
要将默认代码切换为使用 sqlite 而不是 xml,请编辑 persistentStoreCoordinator 并更改:
NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"Foo.storedata"];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (![coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) {
到:
NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"Foo.sqlite"];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]) {
【讨论】: