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

Posted

技术标签:

【中文标题】无法将存档的 NSMutableArray 加载到新的 NSMutableArray【英文标题】:Can not load an archived NSMutableArray into a new NSMutableArray 【发布时间】:2009-10-05 13:28:06 【问题描述】:

应用程序会将 NSMutableArray 保存到存档中,没有任何问题,但是一旦我尝试将 NSMutableArray 加载回新的 NSMutableArray @viewDidLoad,应用程序就会崩溃。我在代码末尾放置了一个断点,其中“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];
  // 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];
 

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

如果问题是 UIImage,那么他的代码会在归档时中断,而不是像他说的那样在取消归档阶段。 它不会损坏。它根本不写。在尝试将 UIImages 保存到 NSUser 默认值时,我自己在实践中看到了这一点。它们不会被写出来,也不会通知您。

以上是关于无法将存档的 NSMutableArray 加载到新的 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

如何将特定 NSMutableArray 中的数据重新加载到 UITableView

outlook存档后毫无反应

将当前位置的距离添加到 NSMutableArray

发送到实例的 iOS 无法识别的选择器 - 将 NSDictionary 添加到 NSMutableArray

无法将对象从块添加到 NSMutableArray

无法将我的班级的 NSMutableArray 保存到文件(IOS)