编辑(2012 年 10 月 22 日):希望以更清晰的方式重申这个问题。
本质上,我正在寻找的是一些可以在多个位置之间(取消)归档的 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 */;
然后在取消归档:
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"];
where ivar1
s 可能会被保存到NSUserDefaults
并且ivar2
s, ivar3
s 到磁盘的某个地方。
我可能最终会为此编写自己的解决方案,但是如果你们想出任何出色的替代方案,请告诉我!
将发布最终产品。