編集 (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, s がどこivar3
かのディスクに保存される可能性があります。
私はおそらくこれに対して独自のソリューションをコーディングすることになりますが、素晴らしい代替案を思いついたら教えてください!
完成品を掲載します。