【问题标题】:About NSException from "NSKeyedUnarchiver unarchiveObjectWithFile :"关于来自“NSKeyedUnarchiver unarchiveObjectWithFile :”的 NSException
【发布时间】:2011-09-25 08:15:57
【问题描述】:
NSArray *t_annos;

@try 
{
  NSLog(@" --- pointer before = %ld --- ", (long) t_annos);  
  t_annos 
     = [NSKeyedUnarchiver unarchiveObjectWithFile : d_path]; 
  NSLog(@" --- pointer after  = %ld --- ", (long) t_annos);
}
@catch (NSException *e) 
{
  NSLog(@" --- e caught  ---"); 
  t_annos = nil;     
}

请考虑以上陈述,情况是:

1

根据文档,如果 d_path 未指向有效存档,则应引发异常。但即使 d_path 故意设置为无效路径,也不会捕获到异常。

2

已在 xcode 模拟器和测试设备 (iphone) 上测试了代码。尽管模拟器和手机设备都没有捕获任何异常,但手机会按预期取消归档数组,而在模拟器上程序停止并在调试器控制台上输出:“程序接收信号:”EXC_BAD_ACCESS“”。

3

“错误访问”错误应该出现在“unarchiveObjectWithFile”语句中,因为程序在第一个 NSLog 输出后停止。

4

当尝试归档和取消归档单个 NSString 对象时,模拟器和测试设备都没有问题。但是即使路径错误,仍然没有捕获到异常。

我可能有一些遗漏,希望有知识的人可以提供帮助。

【问题讨论】:

  • 请您的标题更具创意。我们知道这是一个问题。
  • 标题已编辑,感谢指出...
  • 你的数组中有哪些对象?任何自定义类?
  • 数组中的对象来自一个符合 NSCoding 的自定义类。所以他们(对象)应该没问题。
  • @mja,你是对的。我应该更多地研究数组中的对象。在定义对象的类时犯了一个小错误。不知何故,测试电话没有受到影响,但模拟器只是在编码错误处停止。问题已得到纠正,一切正常。

标签: iphone nskeyedarchiver


【解决方案1】:

根据文档,仅当路径中存在文件并且不是NSKeyedArchiver创建的存档时才会引发异常。

unarchiveObjectWithFile:

解码并返回之前编码的对象图 NSKeyedArchiver 写入给定路径的文件。 + (id)unarchiveObjectWithFile:(NSString *)path

参数:路径

文件的路径,该文件包含先前由 NSKeyedArchiver。

返回值

先前由 NSKeyedArchiver 编码的对象图写入 文件路径。如果路径中没有文件,则返回 nil。

讨论

如果路径中的文件,此方法会引发 NSInvalidArgumentException 不包含有效的存档。

所以,对于-

1:您设置的无效路径很可能没有指向任何文件,因此返回值为零,没有任何异常。

2:您是否确保模拟器上的路径指向之前由NSKeyedArchiver 归档的有效文件?很可能,它指向其他文件。

4:与 #1 相同。

【讨论】:

  • 我认为您对“1”的看法是正确的。至于2,我认为您也可能是对的,但尚未找到验证它的好方法...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多