Изменить (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"];
Где ivar1
s могут быть сохранены в NSUserDefaults
и ivar2
s, ivar3
s где-то на диске.
Я, вероятно, в конечном итоге напишу свое собственное решение для этого, но если вы, ребята, придумаете какие-либо блестящие альтернативы, пожалуйста, дайте мне знать!
Выложу конечный продукт.