这是我的代码:
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
答案 0 :(得分:1)
声明
array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];
将返回一个自动释放对象,该对象将在第一个适当的时刻解除分配。因此,当您稍后访问其count
方法时,该对象不再存在。这就是导致崩溃的原因。
解决此问题的一种方法是正确管理您的阵列,以便只要您需要它就可以保留在阵列中。如果您使用ARC,这可能意味着通过strong
属性管理对象;如果您不使用ARC,则涉及使用retain
。您没有指定如何声明array
,所以我无法更准确。
因为您说该属性声明为:
@property (nonatomic,retain) NSMutableArray *array
简单地做:
self.array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];
应该解决问题。