背景:私は管理対象オブジェクトCarを持っています。私は、ローカルホスト/車/検索に座っているRESTful検索APIを持っています。返される結果は、サーバー側からのCarオブジェクトですが、ユーザーが選択したものだけを保存します。残りの車は私が検索から外れると捨てたいものです。コアデータを持つRestKitの一時オブジェクトのベストプラクティス
最初に私はすべてのようだった:
@interface Car : NSManagedObject //<--- managed object
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
@interface TransientCar : NSObject //<--- regular NSObject!
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
私は、検索結果を表示するが、コンテキストにそれらを保存しない目的のためにTransientCarオブジェクトにREST API検索結果のJSONをマッピングしました。デフォルトでは、管理オブジェクトをマップすると、RestKitは+オブジェクト簡易ファクトリを呼び出してオブジェクトを作成し、現在のコンテキストに挿入します(sharedManagerのオブジェクトストアのコンテキストbtw!にハードコードされます)。
これは持続不可能でした。これは良い習慣です
RKObjectMapping* tempCarMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[tempCarMapping mapKeyPathsToAttributes:
@"year", @"year",
@"make", @"make",
@"model", @"model",
nil];
:だから今私は、ユーザーが詳細ビューにタップし、ため、実際の管理対象オブジェクトを保存する価値が何かをするまで、検索結果データを保持するためにNSMutableDictionaryを使用していますか? NSMutableDictionaryを一時的な表現として使用すると、新しいオブジェクトをコンテキストに挿入する必要があります。私は、オリジナルの管理対象サブクラスを使ってデータを表現するファンだったのですが、何らかの形で「保持しない」というフラグを立てることができましたが、そのたびにフレームワークと戦っているような気がします(および競合状態)。私はまた、新しいRKObjectManagerを作成し、ちょうどその後その全体の文脈をクリアすることによってスクラッチ/使い捨てコンテキストを使用してみましたが、RestKitのActiveRecordのカテゴリの+ managedObjectContextメソッドが返すようにハードコードされています。ソートのこれまで使用しての可能性をscuttles
[[[RKObjectManager sharedManager] objectStore] managedObjectContext];
一時/ごみデータのスクラッチコンテキスト。
NSObjectから継承したモデルクラスが正常ですが、私の最大の関心事は、NSManagedObjectバージョンで過渡モデルを最新の状態に保つことです。それは技術的なものよりもコードの保守性に関する懸念のほうが多いです。エディタ> Generate NSManagedObjectサブクラスに「NSObjectサブクラスをミラーリングしました」というチェックボックスが表示されています。 –
確かに、あなたのモデルがどんな頻度でも変化するならば、私が概説した他の方法の一つが良い選択になるでしょう。 –