2014-04-24 171 views
0

我正在做一個簡單的程序,可以存檔我的對象,並在啓動時取消存檔。如何處理unarchiver與這種情況..?

我有一個lists.m其中可變數組採用歸檔稱爲favouritesList商店商品到文件中。內部列表,我有簡單的對象稱爲favouriteItem

那麼,問題與此代碼

-(void) loadList 
{ 

self.favouritesList = 
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy]; 
if(self.favouritesList == nil) 
    self.favouritesList = [[NSMutableArray alloc]init]; 

} 

,我已經得到唯一的例外是這個 [NSKeyedUnarchiver initForReadingWithData:]:發生了難以理解的存檔( 0X62,0x70,0x6c,0×69(0x73)的,0x74,爲0x30,的0x30)」

我知道我在用的文件是空的(實際上它被從包文件,這也是空的)解檔複製。

那麼,我怎麼能避免這一點,當我仍然希望我的應用程序啓動時從文件加載數據。 當我使用下面的代碼

-(void) loadData { 
    self.URLLists = [NSMutableArray arrayWithContentsOfFile:self.path]; 
    if(self.URLLists == nil) { 
    self.URLLists = [[NSMutableArray alloc]init]; 
    } 

} 

這裏,即使在self.path文件是空的,它返回nil,我只能說 如果它返回nil,我將指派爲新一第一次。 但是,與NSkeyedUnarchiver它工作有點不同.. 你能解釋它是如何不同,我如何避免這個錯誤..? 謝謝。

回答

2

的更簡單的辦法就是使用異常處理:

@try { 
      self.favouritesList = 
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy]; 
    } 
    @catch (NSException *e) { 
      self.favouritesList = [[NSMutableArray alloc]init]; // add more code as needed 
    } 

蘋果的文檔是在這裏。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ

+0

如何處理arrayWithContentsOfFile的情況?我不需要處理任何異常,因爲它不會拋出任何異常? –

+1

@denis_choe:是的。如果您閱讀[unarchiveObjectWithFile:]的文檔(https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSKeyedUnarchiver_Class/Reference/Reference.html#//apple_ref/occ/clm/NSKeyedUnarchiver/unarchiveObjectWithFile :)和[arrayWithContentsOfFile:](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/clm/ NSArray/arrayWithContentsOfFile :),他們每個人都說他們如何對一個空文件做出反應。 NSKeyedUnarchiver拋出一個異常,NSArray返回nil。 – Chuck

0

,而不是試圖解除存檔一個空文件,你爲什麼不只是有文件包含一個空數組?那麼你不需要任何特殊情況。

+0

你介意解釋你會怎麼做,請.. ..? –

+0

你的意思是讓該文件與空數組在..其中..?我的意思是在viewdidload裏面? –

+1

@denis_choe:我的意思是你要在這裏取消存檔的文件,你從你的包中複製的文件是空的。爲什麼不讓文件包含一個空數組,而不是在你的包中存儲一個空文件? – Chuck

相關問題