2010-09-19 2 views
0
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"]; 

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

ответ

2

Похоже, что вам нужно будет архивировать массив, либо с 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. OR Вы можете просто NSMutableArray *myMutableArray = [myArray mutableCopy] предоставить вам NSMutableArray для работы.

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

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

+0

Что такое код для загрузки массива? –

+1

Исправлен мой ответ, чтобы показать, как загрузить. –

+0

Что делать, если я хочу использовать NSMutableArray? –