Невозможно загрузить архивный NSMutableArray в новый NSMutableArray.

StackOverflow https://stackoverflow.com/questions/1520069

Вопрос

Приложение без проблем сохранит NSMutableArray в архив, но как только я попытаюсь загрузить NSMutableArray обратно в новый NSMutableArray @ viewDidLoad, приложение выйдет из строя.Я положил точку перерыва в конце кода, где "temparray = [Unarciver decodeobjectforkey: kdatakey46];"; и Temparray загружается архивированным массивом, но когда я прохожу через «for» loop @ »[poollistdata addobject: testtemp];»; «Poollistdata» не содержит данные из «Temparray».Кроме того, если я не использовал точку останова и просто позволил приложению попытаться загрузиться, приложение выйдет из строя... Что вы думаете, ребята?

Спасибо за ваше время!Джефф

 NSString *filePath = [self dataFilePath];
 if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
 {
  NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
  NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

  field1.text = [unarchiver decodeObjectForKey:kDataKey1];
  // snip another bunch of fields
  field37.text = [unarchiver decodeObjectForKey:kDataKey37];

  soundOn = [unarchiver decodeBoolForKey:kDataKey38];
  soundVolumeSlider.value = [unarchiver decodeDoubleForKey:kDataKey39];
  soundVolumeValue = [unarchiver decodeDoubleForKey:kDataKey39];
  tempArray = [unarchiver decodeObjectForKey:kDataKey46];

  [unarchiver finishDecoding];

  for(int i = 0; i < [tempArray count]; i++)
  {
   NSData *testTemp = 0;
   //NSString *temp = [tempArray objectAtIndex:i];
   testTemp = [tempArray objectAtIndex:i];
   [poolListData addObject:testTemp];
  //[poolListData addObjectsFromArray:tempArray];
  }

  /*
   firstNameTextField.text = field1.text;
   lastNameTextField.text = field2.text;
   adressTextField.text = field3.text;
   emailTextField.text = field4.text;
   */

  [tempArray release];
  [unarchiver release];
  [data release];
 }
Это было полезно?

Решение

Я считаю, что это, по крайней мере частично, ошибка управления памятью.А decodeObjectForKey вызов возвращает автоматически выпущенный объект, поэтому освобождение объекта является ошибкой. tempArray в конце функции.Это может быть причиной сбоя вашего приложения.Что касается poolListData не хранит содержимое разархивированного массива, может быть, вы просто забыли его инициализировать и пытаетесь добавить элементы в нулевой массив?

Другие советы

Если вы вызываете unarchive и не видите никаких значений, значит, в массиве содержится что-то, что невозможно заархивировать.Я считаю, что UIImage может быть примером того, что вы можете иметь в массиве, чтобы попытаться сохранить.Ключ к вашей проблеме заключается в том, какие типы у вас есть в этом tempArray, когда вы его архивируете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top