хранить массив значений cllocation в userdefaults iphone sdk

привет, у меня есть массив значений cllocation, мне нужно сохранить этот массив в пользовательских настройках по умолчанию... как мне это сделать...?
привет, здесь я добавляю объект в свой массив: [AM_locationMP.favArray addObject:[AM_locationMP .locationData objectAtIndex:AM_locationMP.indexno]];

где данные о местоположении — это массив значений меток местоположения.

где класс maplocationVO предназначен для метки MapLocationVO *currentMapLocation;

[AM_delegate.locationData addObject: currentMapLocation];


person devonsmith    schedule 24.02.2011    source источник


Ответы (3)


этого должно быть достаточно, чтобы написать это:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:yourArray forKey:@"clArray"];
[defaults synchronize];
person meronix    schedule 24.02.2011
comment
я пробовал это, но это дает *** - [NSUserDefaults setObject: forKey:]: попытка вставить значение, не являющееся свойством '( ‹MapLocationVO: 0x169440› )' класса '__NSArrayI'. - person devonsmith; 25.02.2011
comment
затем опубликуйте свой код, где вы объявляете свой массив и все объекты, которые вы в него вставляете... проблема кажется где-то неподходящим объектом... - person meronix; 25.02.2011
comment
да, проблема заключалась в неподходящем объекте, то, что я пытался сделать, это вставить объект класса nsobject в массив и сохранить этот массив в nsuserdefault, следовательно, который, согласно документу, не входит в указанный список userdefault, поэтому решение заключалось в том, чтобы заархивировать nsobject класс. и это сработало как шарм, спасибо ... за то, что указали мне правильное направление - person devonsmith; 29.04.2011

Почему люди публикуют сообщения здесь, когда они явно не знают ответа или не понимают, что можно и что нельзя хранить в NSUserDefaults?

Класс NSUserDefaults предоставляет удобные методы для доступа к распространенным типам, таким как числа с плавающей запятой, двойные числа, целые числа, логические значения и URL-адреса. Объект по умолчанию должен быть списком свойств, то есть экземпляром (или для коллекций комбинацией экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Если вы хотите сохранить объект любого другого типа, вам обычно следует заархивировать его для создания экземпляра NSData. Для получения дополнительной информации см. Руководство по программированию предпочтений и настроек. -- Из документации

Вам нужно использовать NSKeyedArchiver, чтобы преобразовать данные CLLocation в NSData. Затем используйте NSKeyedUnarchiver, чтобы превратить NSData обратно в данные CLLocation.

Следующая проблема, которую необходимо решить, заключается в том, что когда вы архивируете объекты CLLocation и сохраняете их в UserDefaults, они не разархивируются должным образом. Единственным решением может быть сохранение их в файл.

person Ben Zeeman    schedule 01.08.2013

использовать это

для установки массива

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

  [standardUserDefaults setObject:yourArray forKey:@"array"];
  [standardUserDefaults synchronize];

и для получения массива

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

  [standardUserDefaults setObject:yourArray forKey:@"array"];

NSMutableArray *array=[standardUserDefaults objectForKey:@"array"];
person Ishu    schedule 24.02.2011
comment
пробовали это сделать, но выдает *** -[NSUserDefaults setObject:forKey:]: попытка вставить значение, не являющееся свойством '( ‹MapLocationVO: 0x169440›)' класса '__NSArrayI'. - person devonsmith; 24.02.2011
comment
сделать массив изменяемым с помощью функции mutableCopy. - person Ishu; 25.02.2011
comment
все еще получаю *** - [NSUserDefaults setObject: forKey:]: попытка вставить не свойственное значение '( ‹MapLocationVO: 0x1c5550›)' класса '__NSArrayM'. - person devonsmith; 25.02.2011
comment
вам нужно проверить свои объекты, присутствующие в массиве, попытаться управлять этими объектами, а также сделать массив как свойство класса. - person Ishu; 25.02.2011
comment
я устанавливаю свойство массива как неатомарное сохранение, и я проверяю объект своего массива, а затем ту же ошибку... - person devonsmith; 25.02.2011
comment
@devonsmith извини, братан, без отладки я не могу помочь тебе больше, чем это. удачи - person Ishu; 28.02.2011