1

タイトルが問題を最もよく表しているかどうかはわかりません。より適切な説明がある場合は、タイトルを編集してください。

そこで、商品注文を扱うアプリを実装しています。各注文には「明細」、つまり各製品の注文情報があります。REST API 呼び出しから取得した「品目」の JSON データは次のようになります。

JSON データ:

"line_item":{
   "id":1234, // Product ID
   "name":"Cliff Bar",
   "sold_price":12.00,
   "sold_quantity":25
}

CoreData オブジェクト (JSON 形式):

"line_item"{
   "product":{
     "id":1234,
     "name":"Cliff Bar",
     "description":"Awesome food",
     "inventory_level":12,
     "standard_price":11.00
   },
    "sold_price":12.00,
    "sold_quantity":25
}

ご覧のとおり、「id」と「name」は販売された製品の「識別子」、いわば「主キー」に似ています。(CoreData には主キーの概念がありませんが、RestKit のような概念はありません) REST API から JSON 情報を取得すると、パフォーマンス上の懸念から line_item オブジェクト内の製品オブジェクトが実際に「折りたたまれ」ました。

質問 1: どのように対処すればよいですか?

製品が存在しない場合、「id」および「name」null 以外のキー値を持つ新しい製品オブジェクトを作成しますか? そして、必要に応じて完全な製品オブジェクトを取得します。それは良いアプローチですか?

これらの不完全なオブジェクトを作成せず、CoreData オブジェクトを JSON オブジェクトと同じように定義したままにしておくと、残念ながら、CoreData 内のオブジェクト間に強い関係はありません。

より良い解決策がある場合は提案してください!

質問2:

質問 1 の答えが「はい」の場合、2 つのキー値 (「name」と「id」) を 1 つの新しく作成されたオブジェクト (「line_item」内の「product」の「id」と「name」) のフィールドにマップするにはどうすればよいですか? ? どのチュートリアルでも、これに関する情報は見つかりませんでした。

あなたがこの問題にどのようにアプローチするかを聞くのが大好きです. ありがとう!

4

1 に答える 1

0

あなたの質問がよくわかりません。しかし、あなたのjsonで、私があなただったら、次のようにコアデータを作成します:

  1. ラインアイテム:
    • 属性:
      • 販売価格
      • 販売数量
    • 関係:
      • 製品
  2. 製品
    • 属性:
      • ID
      • 名前
      • 説明
      • 在庫レベル
      • 標準価格
    • 関係:
      • アイテム

そして、これに依存するRestKitマッピングを作成します。

RKManagedObjectStore *mos = [RKObjectManager sharedManager].managedObjectStore;
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Line_item" inManagedObjectStore:mos];
mapping.identificationAttributes = @[@"id"];
[mapping addAttributeMappingsFromArray:@[@"sold_quantity", @"sold_price"]];

[mapping addRelationshipMappingWithSourceKeyPath:@"product" mapping:[Product manageObjectMappingDefinition]];

ああ、私のコードと構造体が json と互換性がないことに気付きました。

line_item をどのように識別しますか? それがなければ、私は設定できませんidentificationAttributes

于 2013-11-06T13:28:12.757 に答える