CoreData не устанавливает тип как XML

Мне трудно отладить проблему с моими данными (CoreData, NSPersistentDocument).

У меня есть подкласс NSPersistentDocument. Я использую подклассы NSManagedObject/стандартные модели Core Data. Я не делаю ничего особенного в NSPersistentDocument или с классами NSManagedObject. Я просто создаю объект (в подклассе NSPersistentDocument):

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

Когда я пытаюсь сохранить документ в своем приложении, появляется раскрывающийся список форматов файлов. Он включает двоичный (по умолчанию), SQLite и XML. Я сохраняю файл как XML. Когда я пытаюсь просмотреть его (используя меньше или даже открывая в Finder), я обнаруживаю, что файл хранится как двоичный файл.

Есть ли что-то особенное, что мне нужно сделать, чтобы заставить его использовать XML?

Мое понимание, основанное на документации Apple, заключается в том, что при использовании подкласса NSPersistentDocument мне не нужно выполнять работу по настройке NSPersistentStore или NSPersistentStoreCoordinator. Насколько я понимаю, все это бесплатно. Кроме того, из того, что я читал, XML используется по умолчанию.


person Tyler A.    schedule 22.02.2012    source источник
comment
Если вам интересен вопрос, который привел меня сюда: stackoverflow.com/questions/9405120/   -  person Tyler A.    schedule 23.02.2012
comment
FWIW, сохранение, поскольку SQLite сохраняет в правильном формате.   -  person Tyler A.    schedule 06.03.2012


Ответы (1)


Шаблон, который Xcode создает для приложения на основе документа с Core Data, идеально подходит для того, что вы описываете. Возможно, вам потребуется добавить немного больше информации, но нужно проверить правильность типов документов в вашем Info.plist. Ниже приведены стандартные значения. Для этого также есть графический редактор в Xcode на вкладке «Информация», когда ваша цель выбрана в представлении проекта.

Попробуйте создать новый проект с установленными флажками Core Data и Document Based Application (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>
person wbyoung    schedule 11.03.2012
comment
Я попытался создать новый проект, но не могу сохранить его в XML-файле. Кроме того, мой plist, похоже, соответствует приведенному выше отрывку. - person Tyler A.; 13.03.2012