【发布时间】: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,你是对的。我应该更多地研究数组中的对象。在定义对象的类时犯了一个小错误。不知何故,测试电话没有受到影响,但模拟器只是在编码错误处停止。问题已得到纠正,一切正常。