拆分NSKeyedArchiver和NSKeyedUnarchiver的数据

时间:2012-07-31 08:09:36

标签: ios objective-c nskeyedarchiver nscoding

编辑(2012/10/22): 希望更清楚地重述这个问题。

基本上,我正在寻找的是一些可以(un)在多个位置之间存档的NSCoder。一些编码对象基元应保存在位置A中,而其他基元应保存在指定位置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 */;

然后在unarchiving上:

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可能会保存到NSUserDefaultsivar2 s,ivar3到某处的磁盘。

我可能最终会为此编写自己的解决方案,但如果你们想出任何出色的替代方案,请告诉我们!

将发布最终产品。

1 个答案:

答案 0 :(得分:0)

嗯,这是我最终提出的解决方案:

https://github.com/xelxebar/BWPartitioning

这不是子类化NSCoder,而是纯粹的自定义框架。上面的存储库是一个XCode项目,应该只是开箱即用。评论很少,而且非常像alpha,但对它的预期使用模式有一些解释。

随意使用此功能,您可以和/或提出任何问题。感谢您的反馈。

干杯!