Iphone 无法将存档的NSMutableArray加载到新的NSMutableArray中

Iphone 无法将存档的NSMutableArray加载到新的NSMutableArray中,iphone,load,nsmutablearray,archive,Iphone,Load,Nsmutablearray,Archive,应用程序会将NSMutableArray保存到存档中,没有问题,但只要我尝试将NSMutableArray重新加载到新的NSMutableArray@viewdiload,应用程序就会崩溃。我在代码末尾放了一个断点,其中“tempArray=[unarchiver decodeObjectForKey:kDataKey46];”和tempArray正在加载存档的数组,但当我执行“for”循环@[poolListData addObject:testTemp];“poolListData”不保存“

应用程序会将NSMutableArray保存到存档中,没有问题,但只要我尝试将NSMutableArray重新加载到新的NSMutableArray@viewdiload,应用程序就会崩溃。我在代码末尾放了一个断点,其中“tempArray=[unarchiver decodeObjectForKey:kDataKey46];”和tempArray正在加载存档的数组,但当我执行“for”循环@[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];
//剪下另一片田地
field37.text=[unarchiver decodeObjectForKey:kDataKey37];
soundOn=[unarchiver decodeBoolForKey:kDataKey38];
soundVolumeSlider.value=[unarchiver decodeDoubleForKey:kDataKey39];
soundVolumeValue=[unarchiver decodeDoubleForKey:kDataKey39];
tempArray=[unarchiver decodeObjectForKey:kDataKey46];
[未归档完成解码];
对于(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;
AddressTextField.text=field3.text;
emailTextField.text=field4.text;
*/
[临时阵列释放];
[未存档释放];
[数据发布];
}

如果调用unarchive,并且没有看到任何值,则数组中包含无法存档的内容。我相信UIImage将是一个示例,说明您可能需要在阵列中尝试保存的内容。问题的关键是,当您归档tempArray时,该tempArray中有哪些类型。

如果您调用unarchive,并且没有看到任何值,则该数组包含无法归档的内容。我相信UIImage将是一个示例,说明您可能需要在阵列中尝试保存的内容。问题的关键是,当您归档tempArray时,该tempArray中有哪些类型。

我认为这至少部分是内存管理错误。
decodeObjectForKey
调用返回一个自动释放的对象,因此在函数末尾释放
tempArray
是一个错误。这就是你的应用程序崩溃的原因。至于
poolListData
没有保存未归档数组的内容,可能您只是忘记了初始化它,而您正试图将项添加到nil数组中?

我认为这至少部分是内存管理错误。
decodeObjectForKey
调用返回一个自动释放的对象,因此在函数末尾释放
tempArray
是一个错误。这就是你的应用程序崩溃的原因。至于
poolListData
没有保存未归档的数组的内容,也许你只是忘记了初始化它,而你正试图将项目添加到一个nil数组中?

如果问题是UIImage,那么他的代码在归档时会中断,而不是像他说的在未归档阶段。它不会中断。它根本不写。在尝试将UIImage保存到NSUser默认值时,我自己也在实践中看到了这一点。它们不会被写出来,你也不会得到通知。如果问题是UIImage,那么他的代码会在归档时中断,而不是像他说的那样处于非归档阶段。它不会中断。它根本不写。在尝试将UIImage保存到NSUser默认值时,我自己也在实践中看到了这一点。它们不会被写出来,也不会通知你。
 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];
 }