2011-09-25 26 views
1
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;  
} 

请考虑上述声明,该情况是:关于从NSException“NSKeyedUnarchiver unarchiveObjectWithFile:”

根据文件,如果d_path没有指向一个有效的异常应提高存档。但即使d_path被故意设置为无效路径,也不会发生异常。

已测试的模拟器的xcode和测试色器件(iphone)二者的代码。尽管模拟器和电话设备都没有发现任何异常情况,但手机在模拟器上按照预期解除了对阵列的存档操作,程序在输出处停止输出:“程序接收信号:”EXC_BAD_ACCESS“”。

“坏访问”错误应该来在“unarchiveObjectWithFile”的声明,因为该计划第一的NSLog输出后停止。

当尝试与单个的NSString对象存档和取消存档,模拟器和测试装置都没有问题。但即使路径错误也没有发现异常。

我可能会缺少某些东西,希望有人知道可以提供帮助。

+1

请更多的创意与您的图书。我们知道这是一个问题。 – Mat

+0

标题编辑,感谢您指出... – Stanley

+1

什么对象在你的数组?任何自定义类? – mja

回答

4

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

unarchiveObjectWithFile:

解码,返回先前通过在给定的路径写入到文件 的NSKeyedArchiver编码的对象图。 +(ID)unarchiveObjectWithFile:(的NSString *)路径

参数:路径

到包含先前通过 的NSKeyedArchiver编码对象图的文件的路径。先前通过的NSKeyedArchiver编码

返回值

对象图写入到 文件路径。如果路径中没有文件,则返回nil。

讨论

这种方法带来的NSInvalidArgumentException如果在路径 文件不包含一个有效的存档。

所以,对 -

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

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

4:与#1相同。

HTH,

阿克沙伊

+0

我认为你对“1”是正确的。至于2,我认为你可能是对的,但还没有找到验证它的好方法,谢谢... – Stanley