关于 "NSKeyedUnarchiver unarchiveObjectWithFile: "的NSException。

问题描述 投票:1回答: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;     
}

请大家考虑一下上面的说法,情况是这样的。

1

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

2

在xcode模拟器和测试设备(iphone)上测试了这段代码。 虽然模拟器和手机设备都没有捕捉到任何异常,但手机按照预期解压缩了数组,而在模拟器上,程序停止了,在调试器控制台输出:"Program received signal : "EXC_BAD_ACCESS""。

3

"坏访问 "错误应该是在 "unarchiveObjectWithFile "语句处出现的,因为程序在第一次NSLog输出后停止。

4

当尝试用一个单一的NSString对象归档和不归档时,模拟器和测试设备都没有问题。 但即使路径错误,也没有发现异常。

可能是我的地方缺失了什么,希望有懂行的人可以帮忙。

iphone nskeyedarchiver
1个回答
4
投票

根据文档,只有当路径上存在一个文件,并且不是一个由 NSKeyedArchiver.

unarchiveObjectWithFile。

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

参数:路径

一个指向包含之前由NSKeyedArchiver编码的对象图的文件路径。

返回值

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

讨论:在文件路径上没有文件时,返回nil。

如果路径上的文件不包含有效的归档文件,该方法会引发一个NSInvalidArgumentException。

因此,对于 -

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

2: 你是否已经确保模拟器上的路径指向一个有效的文件存档,由 NSKeyedArchiver 早些时候?很有可能,它指向其他文件。

4:和#1一样。

© www.soinside.com 2019 - 2024. All rights reserved.