unarchiveObjectWithFile时出现奇怪错误

时间:2012-07-29 10:24:56

标签: iphone objective-c ios encoding nsmutablearray

这是我的代码:

array = [[NSMutableArray alloc] init];



NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];


//make a file name to write the data to using the
//documents directory:
NSString *fullFileName = [NSString stringWithFormat:@"%@/file", documentsDirectory];

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

我的代码中有什么错误?

这是错误

[__NSArrayM count]: message sent to deallocated instance 0xd5864e0

1 个答案:

答案 0 :(得分:1)

声明

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

将返回一个自动释放对象,该对象将在第一个适当的时刻解除分配。因此,当您稍后访问其count方法时,该对象不再存在。这就是导致崩溃的原因。

解决此问题的一种方法是正确管理您的阵列,以便只要您需要它就可以保留在阵列中。如果您使用ARC,这可能意味着通过strong属性管理对象;如果您不使用ARC,则涉及使用retain。您没有指定如何声明array,所以我无法更准确。

因为您说该属性声明为:

@property (nonatomic,retain) NSMutableArray *array

简单地做:

self.array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

应该解决问题。