0

CoreData を使用して次のクラスを格納しています。

@interface TripSegment : NSManagedObject

@property (nonatomic, retain) NSString * details;
@property (nonatomic, retain) NSDate * endsOn;
@property (nonatomic, retain) NSString * segmentCategory;
@property (nonatomic, retain) NSDate * startsOn;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * tripSegmentId;
@property (nonatomic, retain) ContextCard *contextCard;
@property (nonatomic, retain) Location *endsAt;
@property (nonatomic, retain) Location *startsAt;
@property (nonatomic, retain) Trip *trip;

@end

一部の TripSegments (フライトなど) では、確認番号や座席指定などの追加データが戻ってきます。これらのデータを柔軟な配置で保存したいので、UI に表示するより有用なものを見つけたら、それをサービスに含めて、モデルを移行したり、複雑なクラス階層を処理したりすることなく使用を開始できます。 .

CoreData ストアに永続化されたオブジェクトにキー/値を追加するにはどうすればよいですか? または、フライトまたはホテル滞在を表す特定のクラスを作成し、それらをリレーションシップで個別に保持する必要がありますか?

4

2 に答える 2

1

私が見ているように、あなたにはいくつかの選択肢があります。

  1. TripSegmentクラスにBinaryData属性を追加し、を使用して、追加の属性の格納NSKeyedArchiverを変換することができます。NSDictionaryNSData
  2. 独自の汎用キー/値ペアコアデータオブジェクトを実装し、自分TripSegmentとそのクラスの間に1対多の関係を持たせることができます。
  3. を使用して追加のデータをJSONとの間で変換NSJSONSerializationし、String属性としてTripSegmentクラスに保存できます。

戻ってきた余分なデータをどのように使用したいかによります。独立して属性をクエリできるようにする必要がある場合TripSegment(たとえば、割り当てられているすべてのシート割り当てを取得する場合)、個別のキー/値スタイルクラスを使用するのがおそらく最適です。受信した追加情報の一部としてバイナリ情報を保存するためにCDデータが必要な場合は、base64変換でデータサイズが大きくなる可能性があるため、JSONシリアル化は最適なオプションではない可能性があります。

于 2012-11-08T23:46:43.313 に答える
0

@rickerbhの回答で指摘したように、実行時にカスタムプロパティを本当に追加する必要がある場合は、オプション#2を使用します-これは必要ないと思います

うまく移行する必要がないことは理解しました...お母さんをお母さんにしてバージョンを上げてください。モデルにプロパティを追加するか、名前を変更するだけで、コアデータは透過的に移行できます => 何もしません :)

それが最もクリーンなIMOです

于 2012-11-09T01:11:48.473 に答える