1

我很难调试我的数据(CoreData、NSPersistentDocument)的问题。

我有一个 NSPersistentDocument 的子类。我正在使用 NSManagedObject 子类/标准核心数据模型。我在 NSPersistentDocument 或 NSManagedObject 类中没有做任何特别的事情。我只是在创建一个对象(在 NSPersistentDocument 的子类中):

[NSEntityDescription insertNewObjectForEntityForName:@"ModelName" 
    inManagedObjectContext:[self managedObjectContext]];

当我尝试将文档保存在我的应用程序中时,有一个文件格式下拉菜单。它包括二进制(默认)、SQLite 和 XML。我将文件保存为 XML。当我尝试查看它(使用较少,甚至在 Finder 中打开)时,我发现该文件存储为二进制文件。

有什么特别的东西我需要去强制它到 XML 吗?

根据 Apple 的文档,我的理解是,在使用 NSPersistentDocument 子类时,我不需要进行设置 NSPersistentStore 或 NSPersistentStoreCoordinator 的工作。我的理解是所有这些都是免费的。同样根据我的阅读,XML 是默认设置。

4

1 回答 1

0

Xcode 为使用 Core Data 的基于文档的应用程序创建的模板非常适合您所描述的内容。您可能需要包含更多信息,但要检查的一件事是 Info.plist 中的文档类型是否正确。以下是开箱即用的值。当您在项目视图中选择目标时,Xcode 中的 Info 选项卡下还有一个图形编辑器。

尝试创建一个选中核心数据和基于文档的应用程序的新项目(Xcode 4.3)并检查它是否工作正常。如果是这样,那么您的配置中的某些内容已更改为使其成为二进制而不是 XML。

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>binary</string>
        </array>
        <key>CFBundleTypeMIMETypes</key>
        <array>
            <string>application/octet-stream</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Binary</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSTypeIsPackage</key>
        <false/>
        <key>NSDocumentClass</key>
        <string>Document</string>
        <key>NSPersistentStoreTypeKey</key>
        <string>Binary</string>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>sqlite</string>
        </array>
        <key>CFBundleTypeMIMETypes</key>
        <array>
            <string>application/octet-stream</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>SQLite</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSTypeIsPackage</key>
        <false/>
        <key>NSDocumentClass</key>
        <string>Document</string>
        <key>NSPersistentStoreTypeKey</key>
        <string>SQLite</string>
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>xml</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string></string>
        <key>CFBundleTypeMIMETypes</key>
        <array>
            <string>text/xml</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>XML</string>
        <key>CFBundleTypeOSTypes</key>
        <array>
            <string>????</string>
        </array>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSTypeIsPackage</key>
        <false/>
        <key>NSDocumentClass</key>
        <string>Document</string>
        <key>NSPersistentStoreTypeKey</key>
        <string>XML</string>
    </dict>
</array>
于 2012-03-11T21:48:33.477 回答