2014-12-12 4 views
0

Я помещаю два объекта NSMutableArray в файл NSDictionary и пытаюсь выполнить сериализацию, но вызов метода возвращает nil. Один массив, addresses, представляет собой массив объектов NSString. Другой, engines - это массив объектов, каждый из которых содержит несколько типов данных. Я пытаюсь сериализации, используя следующий код:NSPropertyListSerialization возвращает нуль вместо сериализованных данных

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:engAddr forKey:@"engAddr"]; 
[dictionary setObject:trainList forKey:@"engines"]; 
NSData *data = [NSPropertyListSerialization dataFromPropertyList:dictionary 
                  format:NSPropertyListXMLFormat_v1_0 
               errorDescription:&error]; 

Пошаговый, отладчик показывает массивы правильно добавлены в словарь, но после строки, которые должны сериализовать словарь он показывает data = (NSData *) nil.

Куда я иду не так? Спасибо за помощь!

+0

Я должен добавить, что я также попытался использовать 'format: NSPropertyListBinaryFormat_v1_0' с тем же результатом. – BrianJ

+0

Двигатель содержит пользовательский объект? Если да, вам нужно соответствовать протоколу NSCoding в этом классе, если это не сработает. –

ответ

0

В каких объектах содержатся двигатели?
Plist поддерживает только определенные объекты ниже.

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-54303

Если вы хотите сериализовать пользовательский объект, преобразовать его в NSData по NSKeyedArchiver.
Для этого объекты должны соответствовать протоколу NSCoding.

+0

Я думал, что 'NSData * data = [NSPropertyListSerialization ...' преобразовывает объекты в NSArray в NSData. Это неверно? – BrianJ

+0

все объекты в NSArray должны быть конкретным классом (NSString, NSNumber, NSData ...). в противном случае, преобразовать его в NSData самостоятельно. – bluedome

Смежные вопросы