我想在NSUserDefaults中存儲一些自定義對象。我知道,它應該實施NSCoding協議。但問題是,我無法更改該類,因爲它是由某個SDK提供的。在iOS中存儲自定義對象(不實施NSCoding)的方法
那麼有什麼方法可以存儲這些自定義對象嗎?
我想在NSUserDefaults中存儲一些自定義對象。我知道,它應該實施NSCoding協議。但問題是,我無法更改該類,因爲它是由某個SDK提供的。在iOS中存儲自定義對象(不實施NSCoding)的方法
那麼有什麼方法可以存儲這些自定義對象嗎?
您可以創建自己的自定義類,其中包含原始類的所有字段。然後你可以免費獲得大部分(如果不是全部的話)編碼。 最終結果與爲原始對象實現NSCoding非常相似,因爲所有更改僅限於「編碼」和「解碼」(保存/恢復)功能。你的項目中沒有其他任何東西需要改變。
編輯:
您可以創建兩個專用歸檔功能
func saveToArchive(customObject: CustomObject) -> Bool {
<your code; return true if succeeded>
}
func loadFromArchive(identifier: Int) -> CustomObject? {
let newObject = CustomObject
< again your code to retrieve the correct object (your version);
assign each field to newObject and return it, return nil you have an issue>
}
通過這種方法,你基本上永遠不可能用你的對象的版本,除了從持久商店轉換到/(數據庫,存檔等)類似於「適配器」軟件設計模式(或包裝器)。
如何使用包裝類並使其實現'NSCoding'? – crizzis
期待這種類別的其他功能呢?我無法更改SDK行爲。 – Sac
你不需要。請參閱下面的編輯。 – Mozahler