当您使用核心数据在Xcode上启动新的iOS项目时,它会使用扩展名.sqlite
初始化数据库。当您为OSX的新项目执行相同操作时,数据库具有扩展名.storedata
。
这两者有什么区别吗?谢谢。
答案 0 :(得分:8)
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]) {