Можно ли использовать этот код с массивом пользовательских объектов?

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

Если я создам массив пользовательских объектов, соответствующих протоколу NSCoding, будет ли работать вышеописанное? Должен ли я сделать так, чтобы пользовательский класс и контроллер представления, содержащий массив пользовательских объектов, соответствовали протоколу NSCoding или только пользовательскому классу? Должен ли я где-то использовать NSKeyedArchiver?


person node ninja    schedule 19.09.2010    source источник


Ответы (1)


Похоже, вам нужно будет заархивировать свой массив с помощью NSKeyedArchiver или NSArchiver. Если вы сначала заархивируете массив в объект NSData:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];

Затем вы можете сохранить эти данные в NSUserDefaults следующим образом:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"myArray"];

Чтобы загрузить массив, используйте:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myArray"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Если вы хотите использовать NSMutableArray, просто замените любые вхождения NSArray в приведенном выше коде на NSMutableArray. ИЛИ вы можете просто NSMutableArray *myMutableArray = [myArray mutableCopy] предоставить вам NSMutableArray для работы.

Но тогда, эй, если вы собираетесь сделать его совместимым с NSCoding, почему бы просто не заархивировать его в файл?

Документация, которая заставила меня подумать, что вам нужно будет использовать архиватор: здесь, чтобы вы могли убедиться сами.

person Stone Mason    schedule 19.09.2010
comment
Что делать, если я хочу использовать NSMutableArray? - person node ninja; 20.09.2010
comment
Обратите внимание, что объекты в массиве должны соответствовать протоколу NSCoding, если они должны быть заархивированы. - person Alexsander Akers; 21.09.2010