Можно ли использовать этот код с массивом пользовательских объектов?
-
04-10-2019 - |
Вопрос
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];
Если я сделаю множество пользовательских объектов, соответствующую протоколу Nscoding, то работает выше? Должен ли я сделать как пользовательский класс, так и контроллер представления, который удерживает массив пользовательских объектов, соответствующий протоколу Nscoding или просто настроен класс? Должен ли я где-нибудь использовать NskeeDarkiver?
Решение
Похоже, вам нужно будет архивировать ваш массив, либо с 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 соответствует, почему бы просто архивировать его в файл?
Документация, которая заставила меня думать, что вам нужно будет использовать архиватор здесь Так что вы можете проверить сами.