CoreData未将类型设置为XML

时间:2012-02-22 23:36:04

标签: cocoa core-data nspersistentdocument

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

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

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

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

我需要一些特殊的东西来强迫它使用XML吗?

根据Apple的文档,我的理解是在使用NSPersistentDocument子类时,我不需要设置NSPersistentStore或NSPersistentStoreCoordinator。我的理解是所有这一切都是免费的。同样从我读过的内容来看,XML是默认的。

1 个答案:

答案 0 :(得分:0)

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

尝试使用核心数据和基于文档的应用程序创建一个新项目(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>