-1

这是我的代码:

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
4

1 回答 1

1

该声明

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

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

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

既然您说该属性被声明为:

@property (nonatomic,retain) NSMutableArray *array

简单地做:

self.array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

应该解决问题。

于 2012-07-29T10:32:04.400 回答