【问题标题】:What is the difference between .sqlite and .storedata.sqlite 和 .storedata 有什么区别
【发布时间】:2014-05-31 19:42:26
【问题描述】:

当您使用核心数据在 Xcode 上启动一个新的 iOS 项目时,它会初始化一个扩展名为 .sqlite 的数据库。当您为 OSX 的新项目执行相同操作时,数据库的扩展名为 .storedata。

这两者有什么区别吗?谢谢。

【问题讨论】:

    标签: ios macos core-data


    【解决方案1】:

    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]) {
    

    【讨论】:

    • 除此之外,扩展名并没有什么特别的相关性,它主要只是一个命名约定。
    • 是否可以强制 OSX 创建一个 sqlite 数据库?我问这个是因为我有打算从 iOS 转换的应用程序,这些应用程序已经预先填充了数据库 .sqlite。
    • 是的。如果您查看persistentStore 方法,您会发现他们实际创建存储并设置类型的位置。请参阅答案中的其他 cmets。
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多