Сохранение массива в NSUserDefaults - PullRequest
4 голосов
/ 27 февраля 2011

Как массив сохраняется в NSUserDefaults?

У меня есть следующий код, который пытается сохранить массив NSURL

NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS];
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
[defs setObject:temp forKey:@"URLs"];

но я получаю предупреждение

- [NSUserDefaults setObject: forKey:]: попытка вставить значение, не относящееся к свойству

Как правильно хранить этот или коллекцию NSURLS?

Ответы [ 3 ]

10 голосов
/ 27 февраля 2011

Вы не можете напрямую хранить NSURL в NSUserDefaults, только NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary; также любой NSArray или NSDictionary может содержать только объекты этих типов. Вам придется преобразовать NSURL в один из этих типов, скорее всего, с помощью absoluteString, чтобы преобразовать их в NSStrings.

0 голосов
/ 01 мая 2014
  if you want save Object Like Array ,So you use Archived Class

    NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS];
    [[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:temp] forKey:@"URLs"];

you also need coder and decoder method for this.  
    This is Working Fine For Me.
0 голосов
/ 27 февраля 2011

Проблема заключается в [mySingleton sharedMySingleton].sharedURLS. NSURl нельзя хранить в NSUserDefaults, по крайней мере, в классе NSURL, поскольку они не являются объектами списка свойств (объяснение ниже). Я бы порекомендовал преобразовать URL-адреса в строки NSStrings и затем поместить их в NSUserDefaults, например так:

NSString *urlString = [url absoluteString];

Есть похожая проблема, с которой здесь столкнулся другой пользователь ( NSUserDefaults не сохранит NSDictionary ), где проблема заключалась в том, что объекты, которые программист помещал в NSDictionary (в данном случае NSArray), не были список объектов недвижимости. По сути, объектами списков свойств являются такие вещи, как NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary, необходимый формат для сохранения в NSUserDefaults.

...