2010-02-27 38 views
4

我想創建一個NSCoder的子類,但我真的不知道從哪裏開始。 Apple's documentation列出了哪些方法是必需的,但沒有其他多少。也許我的Google-fu很弱,但我找不到任何實現的例子,例如encodeValueOfObjCType:at:,任何地方。 (雖然我認爲它涉及很多情況。)NSCoder的子類(最好是簡單的)?

任何人都知道NSCoder的示例子類我可以看一下,或者想知道encodeValueOfObjCType:at:decodeValueOfObjCType:at:應該是什麼樣的情況?

+2

除了繼承NSCoder之外,你還想達到什麼目的?您不必爲NSCoder子類化存檔對象。 – stefanB 2010-02-28 06:57:35

+1

我正在嘗試創建自己的歸檔程序,它可以處理更簡單的對象圖,但會生成可讀的XML。 – andyvn22 2010-02-28 07:52:45

回答

1

我剛剛開源a NSCoder子類here 它基本上是不贊成的NSArchiver的複製品。 應該讓任何人絆倒這個問題開始。

1

我也一直希望(ab)使用NSCoder生成比NSKeyedArchiver生成的更簡單的XML併爲其實現了一些類。這些課程名爲RWPlainXMLTreeEncoderRWPlainXMLTreeDecoder,我也寫了some test code for them

RWPlainXMLTreeEncoder假定您正在編碼的對象圖是一棵樹(如果同一對象編碼兩次,解碼樹將包含兩個不同的副本而不是一個共享副本;如果您嘗試編碼循環圖引發了一個例外)。每編碼對象會生成一個如下大致像一個用於本實施例中,包含字符串「的字符串」的陣列的編碼的XML元素:

<ROOT type="@NSArray"><NS.object.0 type="@NSString"><NS.bytes>4120737472696E67</NS.bytes></NS.object.0></ROOT> 

我想通過使用不同的方法來進一步改善上述而不是對象自身encodeWithCoder:的對象,如數組和字符串,因此,上面的會變成:

<ROOT type="array"><item.0 type="string">A string</item.0></array></ROOT> 

我但是不知道我是否會繼續這方面的工作。我的總體目標是使用一種相當通用,簡單的方法將對象樹保存到一個文件中,該文件利用我已經編寫的encodeWithCoder:方法,同時生成的文件不像使用NSKeyedArchiver時那樣與Cocoa相關。這將允許其他人編寫在其他平臺上打開這些文件的應用程序。

但是我現在明白,已經有similar efforts這可能已經更先進了,而且,XML是一種文檔標記語言,它可能不是最好的目標格式,有些non-markup language可能更適合。不過,如果你想繼續這個或者有其他的理由來看看一個相當簡單的NSCoder子類,請隨意使用我的代碼。你也可以看看MAKeyedArchiver。哦,我的代碼被BSD樣式的許可證所覆蓋(至少SVN revision 424的版本是,我可能會在未來版本中改變這個版本)。歡迎改進和反饋。

+0

RWPlainXMLTreeEncoder就是我正在尋找的樣品!謝謝。 – andyvn22 2010-04-02 16:24:35

+0

即使鏈接已死亡,文件仍然存在。請點擊此處:http://galton.svn.sourceforge.net/viewvc/galton/Sources/Trunk/Classes/RWPlainXMLTreeEncoder.m?revision=510&view=markup – andyvn22 2012-03-02 01:39:26

+0

獲取該鏈接的404 ... – Marplesoft 2013-03-07 05:47:17

相關問題