2009-04-30 45 views

回答

9

用戶默認值基本上是一個屬性列表。屬性列表與JSON類似,只能存儲特定類型的數據 - NSString,NSNumber,NSData,NSDate,NSArray,NSDictionary。如果您嘗試以用戶默認方式存儲其他任何內容,則會發生異常。屬性列表也不能處理任意的對象圖,只能處理樹。

你總是可以把你的自定義狀態,並把它轉換成一個屬性列表兼容的數據結構,然後將其存儲在用戶的默認值;但是你基本上實現了一個對象序列化機制,你可以使用NSArchiver已經提供的更強大的一個。

10

initWithCoder:使用由OS時未歸檔XIB文件;如果仔細觀察,您會看到initWithFrame:未在您的XIB中創建的視圖中調用;他們將會調用initWithCoder:

+0

嗨本,當我使用XIB時,沒有這種方法我就沒事了。對於以編程方式構建的視圖,我通常只需使用loadView即可。對於使用IB構建的視圖,我使用viewDidLoad {}。所以我試圖理解什麼時候使用initWithCoder是合理的: – Coocoo4Cocoa 2009-05-01 15:31:18

1

只要我有一些複雜的數據存儲,我永遠不必手動編輯,我會與NSCoder一起去。例如,我的應用程序Converter將從互聯網下載的貨幣匯率存儲在NSCoder存檔中。但是,這是它在這種存檔中唯一保存的內容:單元定義只能用手進行修改,它們保存在應用程序包中的一系列plist文件中,而最近選定的單元和值保存在NSUserDefaults的。