Использование NSKeyedArchiver для генерации XML из NSManagedObjects, хранящихся в NSDictionary - PullRequest
3 голосов
/ 04 октября 2011

У меня есть NSDictionary, который содержит кучу NSManagedObjects.Затем я могу использовать NSKeyedArchiver, чтобы записать это в объект NSData.Они генерируются с использованием этого метода. , который отлично работает и позволяет мне сохранить часть схемы на диск, а затем прочитать ее обратно как новый набор объектов в базовой модели данных.Если я использую либо archivedDataWithRootObject: или archiveRootObject: toFile :, согласно документация Я могу видеть, что формат архива NSPropertyListBinaryFormat_v1_0, в то время как я хочу сериализация в NSPropertyListXMLFormat_v1_0, так что я могу написать свои объектыфайл, а затем обработать их в другом месте, как старый XML.(На самом деле я хочу генерировать из них документы в системе на базе Windows.)

1) Есть ли способ, которым я могу это сделать?Если так, то как?2) Есть ли лучший подход.

Я хочу сохранить сериализованную природу, поскольку я также хочу позже отправить файл обратно на устройство iOS и воссоздать объектную модель.

Ответы [ 2 ]

3 голосов
/ 04 октября 2011
  1. Создайте свой собственный экземпляр NSKeyedArchiver с initForWritingWithMutableData:.
  2. Установите формат с помощью setOutputFormat:NSPropertyListXMLFormat_v1_0.
  3. Кодируйте ваш корневой объект с помощью encodeObject:forKey:.
  4. Звоните finishEncoding.

Чтобы разархивировать данные, которые вы закодировали таким образом, вы должны аналогичным образом создать NSKeyedUnarchiver.

1 голос
/ 05 октября 2011

Спасибо Оле! Я шел в этом направлении, но не был уверен, что это был правильный путь. Вот что я сделал в коде на случай, если он кому-нибудь поможет.

NSDictionary *dataAsDictionary=[self toDictionaryBlockingRelationships:blockRelationship];
NSString   *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
NSMutableData *xmlData=[NSMutableData data];

NSKeyedArchiver *archive=[[NSKeyedArchiver alloc ]initForWritingWithMutableData:xmlData];

[archive setOutputFormat:NSPropertyListXMLFormat_v1_0];
[archive encodeRootObject:dataAsDictionary];
[archive finishEncoding];

if(![xmlData writeToFile:savePath atomically:NO]){
    NSLog(@"Failed to write to file to filePath=%@", savePath);
}
[archive release];
...