2012-07-31 63 views
0

編輯(2012/10/22): 用希望更清楚的術語重述此問題。NSKeyedArchiver和NSKeyedUnarchiver的拆分數據

本質上,我正在尋找的是一些可以(不)在多個位置之間存檔的NSCoder。一些編碼的對象原語的應保存在一個位置,而其他應保存在指定位置B等

例如,假設我們有一個類是這樣的:

@interface SomeClass 
{ 
    NSString *ivar1; 
    NSString *ivar2; 
    NSString *ivar3; 

    SomeClass *ivarZ; 
} 

... 

@end 

的地方,我們有一個實例:

SomeClass *someObject; 

我想要做的是一樣的東西上節約了以下內容:

NSData *prefDat = [KeyedMultiArchiver archiveRootObject:someObject 
             withPartitionKey:@"DataForNSUserDefaults"]; 
NSData *permDat = [KeyedMultiArchiver archiveRootObject:someObject 
             withPartitionKey:@"DataForPermanentStorage"]; 
/* save prefDat to NSUserDefaults */; 
/* save permDat to some appropriate NSURL */; 

,然後解壓:

SomeClass *anotherObject = [SomeClass new]; 

NSData *prefDat = /* get from NSUserDefaults */; 
NSData *permDat = /* get from appropriate NSURL */; 

[KeyedMultiUnarchiver unarchiveData:prefDat 
         intoObject:anotherObject 
        withPartitionKey:@"DataForNSUserDefaults"]; 

[KeyedMultiUnarchiver unarchiveData:permDat 
         intoObject:anotherObject 
        withPartitionKey:@"DataForPermanentStorage"]; 

ivar1 S可能會發生得到的地方保存到NSUserDefaultsivar2 S,ivar3 s到磁盤。

我可能最終會編寫我自己的解決方案,但如果你們想出任何明智的選擇,請讓我知道!

將發佈最終產品。

+0

我想你需要提供一些關於你的結構的更多細節。它是一個頂級字典,它具有可變數據和低於它的不可變數據,還是分散在不可變數據結構周圍的可變數據? – 2012-07-31 09:14:41

+0

它至少有3層深。每層中的每個對象可能有一個或兩個不可變和可變數據。從全球角度來看,可變屬性和不可變屬性之間沒有系統分割;層次結構中的每個班級都自行決定。我希望儘可能地集中數據序列化邏輯 - 希望保留單個類保存並加載它們的單個數據或任何類型的數據。 – Ncat 2012-07-31 09:35:23

+0

不幸的是,在發佈這個問題後,該項目暫時停止了,所以我還沒有能夠修復它。然而,我想到的一個(絕望)解決方案是重寫序列化代碼來使用Core Data。我真的希望避免這一點,所以任何建議都非常感謝。 – Ncat 2012-08-06 02:34:40

回答

0

嗯,這裏是我最後想出瞭解決方案:

https://github.com/xelxebar/BWPartitioning

而是繼承NSCoder的,這純粹是一個自定義的框架。上面的存儲庫是一個XCode項目,應該剛開箱即可運行。評論是稀疏的,它是非常的阿爾法,但有一個解釋它的預期使用模式。

隨意使用這個,但你可以和/或提出任何問題。感謝您的反饋。

乾杯!