0

編集 (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"];

ivar1s が保存される場所NSUserDefaultsivar2s, s がどこivar3かのディスクに保存される可能性があります。

私はおそらくこれに対して独自のソリューションをコーディングすることになりますが、素晴らしい代替案を思いついたら教えてください!

完成品を掲載します。

4

1 に答える 1

0

さて、これが私が思いついた解決策です:

https://github.com/xelxebar/BWPartitioning

NSCoder をサブクラス化する代わりに、これは純粋にカスタム フレームワークです。上記のリポジトリは XCode プロジェクトであり、箱から出してすぐに実行できます。コメントはまばらで、非常にアルファ版ですが、意図した使用パターンについて少し説明があります。

ただし、これを自由に使用したり、質問したりしてください。フィードバックをお待ちしております。

乾杯!

于 2012-11-02T09:01:55.750 に答える