Вопрос

Мне было интересно, можно ли использовать метод NSCODER:

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top