Кодировать NSArray или NSDictionary с использованием nscoder
-
19-09-2019 - |
Вопрос
Мне было интересно, можно ли использовать метод NSCODER:
- (void)encodeObject:(id)objv forKey:(NSString *)key
кодировать либо экземпляр NSArray, либо NSDictionary. Если нет, как вы их кодируете? Я пытаюсь использовать nskeyedarchived / nskeyedunarchiver для отправки данных между телефонами с использованием GameKit. Я попробовал это и, кажется, не могу получить строку, которую я хранил в своем массиве. Класс пакетов, который я сделал, проходит вместе с целым числом типа пакета, но не данные в массиве.
Заранее спасибо!
Решение
NSKeyEdarchiver/Unarchiver должен кодировать и декодировать NSArrays и NSDictionary без проблем. Если ваш класс пакетов, который вы создали [encodeObject:
myNsArray
forKey:@"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.