我很难调试我的数据问题(CoreData,NSPersistentDocument)。
我有一个NSPersistentDocument的子类。我正在使用NSManagedObject子类/标准核心数据模型。我在NSPersistentDocument或NSManagedObject类中没有做任何特殊操作。我只是在创建一个对象(在NSPersistentDocument的子类中):
[NSEntityDescription insertNewObjectForEntityForName:@"ModelName"
inManagedObjectContext:[self managedObjectContext]];
当我尝试在我的应用程序中保存文档时,会出现文件格式的下拉列表。它包括二进制(默认),SQLite和XML。我将文件保存为XML。当我尝试查看它时(使用较少,甚至在Finder中打开),我发现该文件存储为二进制文件。
我需要一些特殊的东西来强迫它使用XML吗?
根据Apple的文档,我的理解是在使用NSPersistentDocument子类时,我不需要设置NSPersistentStore或NSPersistentStoreCoordinator。我的理解是所有这一切都是免费的。同样从我读过的内容来看,XML是默认的。
答案 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>