Закодируйте NSArray или NSDictionary, использующий NSCoder

Я задавался вопросом, возможно ли использовать метод NSCoder:

- (void)encodeObject:(id)objv forKey:(NSString *)key

закодировать или экземпляр NSArray или NSDictionary. Если не, как Вы идете о кодировании их? Я пытаюсь использовать NSKeyedArchived / NSKeyedUnarchiver для отправки данных между использованием телефонов GameKit. Я попробовал его и, может казаться, не получаю строку, которую я сохранил в своем массиве. Пакетный класс, который я сделал, проникает наряду с целым числом типа пакета, но не данными в массиве, которым это кажется.

Заранее спасибо!

18
задан Ron Dear 9 February 2010 в 02:39
поделиться

3 ответа

NSKeyedArchiver/Unarchiver должен кодировать и декодировать NSArrays и NSD словари без проблем. Если созданный вами пакетный класс реализует протокол NSCoding, то вам необходимо явно вызвать [encodeObject:myNsArrayforKey:@"stringsArray"] в вашем методе -encodeWithCoder: (предполагая, что myNsArray - это имя переменной экземпляра в вашем пакетном объекте, который вы хотите кодировать). Но тогда архиватор и NSArray должны позаботиться об остальном. Если вы это делаете, то было бы полезно узнать больше о компоновке ваших классов и кто кому кого вызывает при кодировании/декодировании.

10
ответ дан 30 November 2019 в 05:57
поделиться

Если массив или словарь является корневым объектом, вы должны сделать

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

или

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];

Если это переменная экземпляра пользовательского класса, в -encodeWithCoder: метод должен выполнять

[coder encodeObject:someArray forKey:@"someArray"];

, а затем в -initWithCoder: метод

someArray = [[coder decodeObjectForKey:@"someArray"] retain];
32
ответ дан 30 November 2019 в 05:57
поделиться

Какие объекты вы храните в массиве? Убедитесь, что все объекты, хранящиеся в массиве, реализуют протокол NSCoding.

21
ответ дан 30 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: