Я задавался вопросом, возможно ли использовать метод NSCoder:
- (void)encodeObject:(id)objv forKey:(NSString *)key
закодировать или экземпляр NSArray или NSDictionary. Если не, как Вы идете о кодировании их? Я пытаюсь использовать NSKeyedArchived / NSKeyedUnarchiver для отправки данных между использованием телефонов GameKit. Я попробовал его и, может казаться, не получаю строку, которую я сохранил в своем массиве. Пакетный класс, который я сделал, проникает наряду с целым числом типа пакета, но не данными в массиве, которым это кажется.
Заранее спасибо!
NSKeyedArchiver/Unarchiver должен кодировать и декодировать NSArrays и NSD словари без проблем. Если созданный вами пакетный класс реализует протокол NSCoding, то вам необходимо явно вызвать [encodeObject:
myNsArray
forKey:@"stringsArray"]
в вашем методе -encodeWithCoder:
(предполагая, что myNsArray - это имя переменной экземпляра в вашем пакетном объекте, который вы хотите кодировать). Но тогда архиватор и NSArray должны позаботиться об остальном. Если вы это делаете, то было бы полезно узнать больше о компоновке ваших классов и кто кому кого вызывает при кодировании/декодировании.
Если массив или словарь является корневым объектом, вы должны сделать
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];
или
BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];
Если это переменная экземпляра пользовательского класса, в -encodeWithCoder:
метод должен выполнять
[coder encodeObject:someArray forKey:@"someArray"];
, а затем в -initWithCoder:
метод
someArray = [[coder decodeObjectForKey:@"someArray"] retain];
Какие объекты вы храните в массиве? Убедитесь, что все объекты, хранящиеся в массиве, реализуют протокол NSCoding.