2012-07-29 45 views
-1

這是我的代碼:奇怪的錯誤而un​​archiveObjectWithFile

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

聲明

array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName]; 

會還給你將在第一個適當的時候被釋放一個自動釋放對象。因此,當您稍後訪問其count方法時,該對象不再存在。這是導致崩潰的原因。

解決這個問題的一種方法是正確地管理你的數組,以便只要你需要它就停留在那裏。如果您使用ARC,則可能意味着通過strong屬性管理對象;如果您不使用ARC,則需要使用retain。你不指定如何聲明array,所以我不能更精確。

既然你說,財產被聲明爲:

@property (nonatomic,retain) NSMutableArray *array 

簡單地做:

self.array = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName]; 

應該解決這個問題。

+0

感謝您的回答,我不使用ARC ...我做了@property(nonatomic,retain)NSMutableArray * array; – 2012-07-29 10:51:47

+0

另一個問題,我不想要一個autorelease對象...我該如何強制unarchiveObjectWithFile返回一個NOT-autorelease對象? – 2012-07-29 10:54:48

+0

請參閱我的編輯... – sergio 2012-07-29 10:58:51