2011-09-25 52 views
1
NSArray *t_annos; 

@try 
{ 
    NSLog(@" --- pointer before = %ld --- ", (long) t_annos); 
    t_annos 
    = [NSKeyedUnarchiver unarchiveObjectWithFile : d_path]; 
    NSLog(@" --- pointer after = %ld --- ", (long) t_annos); 
} 
@catch (NSException *e) 
{ 
    NSLog(@" --- e caught ---"); 
    t_annos = nil;  
} 

請考慮上述聲明,該情況是:關於從NSException「NSKeyedUnarchiver unarchiveObjectWithFile:」

根據文件,如果d_path沒有指向一個有效的異常應提高存檔。但即使d_path被故意設置爲無效路徑,也不會發生異常。

已測試的模擬器的xcode和測試色器件(iphone)二者的代碼。儘管模擬器和電話設備都沒有發現任何異常情況,但手機在模擬器上按照預期解除了對陣列的存檔操作,程序在輸出處停止輸出:「程序接收信號:」EXC_BAD_ACCESS「」。

「壞訪問」錯誤應該來在「unarchiveObjectWithFile」的聲明,因爲該計劃第一的NSLog輸出後停止。

當嘗試與單個的NSString對象存檔和取消存檔,模擬器和測試裝置都沒有問題。但即使路徑錯誤也沒有發現異常。

我可能會缺少某些東西,希望有人知道可以提供幫助。

+1

請更多的創意與您的圖書。我們知道這是一個問題。 – Mat

+0

標題編輯,感謝您指出... – Stanley

+1

什麼對象在你的數組?任何自定義類? – mja

回答

4

根據文檔,只有在路徑中存在文件並且不是由NSKeyedArchiver創建的存檔時纔會引發異常。

unarchiveObjectWithFile:

解碼,返回先前通過在給定的路徑寫入到文件 的NSKeyedArchiver編碼的對象圖。 +(ID)unarchiveObjectWithFile:(的NSString *)路徑

參數:路徑

到包含先前通過 的NSKeyedArchiver編碼對象圖的文件的路徑。先前通過的NSKeyedArchiver編碼

返回值

對象圖寫入到 文件路徑。如果路徑中沒有文件,則返回nil。

討論

這種方法帶來的NSInvalidArgumentException如果在路徑 文件不包含一個有效的存檔。

所以,對 -

1:最有可能是你設置不指向任何文件,因此返回值是零,沒有任何異常的無效的路徑。

2:您是否確保模擬器上的路徑指向之前由NSKeyedArchiver歸檔的有效文件?最有可能的是,它指向一些其他文件。

4:與#1相同。

HTH,

阿克沙伊

+0

我認爲你對「1」是正確的。至於2,我認爲你可能是對的,但還沒有找到驗證它的好方法,謝謝... – Stanley