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可能會發生得到的地方保存到NSUserDefaults
和ivar2
S,ivar3
s到磁盤。
我可能最終會編寫我自己的解決方案,但如果你們想出任何明智的選擇,請讓我知道!
將發佈最終產品。
我想你需要提供一些關於你的結構的更多細節。它是一個頂級字典,它具有可變數據和低於它的不可變數據,還是分散在不可變數據結構周圍的可變數據? – 2012-07-31 09:14:41
它至少有3層深。每層中的每個對象可能有一個或兩個不可變和可變數據。從全球角度來看,可變屬性和不可變屬性之間沒有系統分割;層次結構中的每個班級都自行決定。我希望儘可能地集中數據序列化邏輯 - 希望保留單個類保存並加載它們的單個數據或任何類型的數據。 – Ncat 2012-07-31 09:35:23
不幸的是,在發佈這個問題後,該項目暫時停止了,所以我還沒有能夠修復它。然而,我想到的一個(絕望)解決方案是重寫序列化代碼來使用Core Data。我真的希望避免這一點,所以任何建議都非常感謝。 – Ncat 2012-08-06 02:34:40