2017-05-18 47 views
0

我想在NSUserDefaults中存儲一些自定義對象。我知道,它應該實施NSCoding協議。但問題是,我無法更改該類,因爲它是由某個SDK提供的。在iOS中存儲自定義對象(不實施NSCoding)的方法

那麼有什麼方法可以存儲這些自定義對象嗎?

+0

如何使用包裝類並使其實現'NSCoding'? – crizzis

+0

期待這種類別的其他功能呢?我無法更改SDK行爲。 – Sac

+0

你不需要。請參閱下面的編輯。 – Mozahler

回答

0

您可以創建自己的自定義類,其中包含原始類的所有字段。然後你可以免費獲得大部分(如果不是全部的話)編碼。 最終結果與爲原始對象實現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> 
} 

通過這種方法,你基本上永遠不可能用你的對象的版本,除了從持久商店轉換到/(數據庫,存檔等)類似於「適配器」軟件設計模式(或包裝器)。

+0

期望該類別的其他功能呢?我無法更改SDK行爲。 – Sac

+0

我編輯了我的答案以提供一種可能的解決方案。您可以使用CustomObject數據創建對象,將其保存,檢索並根據需要再次將其轉換回CustomObject。您的對象版本不在存檔函數之外,因此它不會影響項目中的其他代碼。 – Mozahler

相關問題