Можно ли использовать этот код с массивом пользовательских объектов? - PullRequest
0 голосов
/ 19 сентября 2010
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

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

1 Ответ

2 голосов
/ 19 сентября 2010

Похоже, вам нужно будет заархивировать ваш массив, либо с 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, почему бы просто не заархивировать его в файл?

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

...