0

Stackoverflows API と同様に、RestKit を使用してリモート Web サービスからデータをキャッシュしています。

API には質問とタグがありますが、テキストでタグを取得する代わりに、タグ ID を取得します。

質問リソースは次のようになります。

{
  "items": [
    {
      "question_id": 11260172,
      "tags": [
          { "tag_id" : 1},
          { "tag_id" : 2},
          { "tag_id" : 3}
      ],
      "view_count": 1,
      [...]
}

タグ リソースは次のようになります。

{
  "items": [
    {
      "id": 1,
      "name": "c#",
    },
    {
      "id": 2,
      "name": "java",
    },
    {
      "id": 3,
      "name": "php",
    }]
}

質問とタグの間に結合テーブルを作成して、質問に多くのタグを付け、タグに多くの質問を含めることができるようにします。

1対多の作業はできましたが、多対多の結合テーブルではありません。したがって、RestKit の多対多マッピングがこのような関係をどのように探すべきか、またデータ モデルがどのように見えるべきか疑問に思います。

次のマッピングを試しましたが、多対多ではありません。

[tagMapping mapKeyPath:@"id" toRelationship:@"questions" withMapping:tagsQuestionsMappingMapping];
[questionMapping mapKeyPath:@"tags" toRelationship:@"tags" withMapping:tagsQuestionsMappingMapping];
4

1 に答える 1

1

ですから、私たちは明確です。これら 2 つの異なる Web サービスでルート キーが同じであるため、2 つの異なるマップを使用する必要があります。

質問エンドポイントのマッピングの例を次に示します。

RKManagedObjectMapping* nested = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore:nil];
[nested mapKeyPath: @"tag_id" toAttribute: @"id"];

RKManagedObjectMapping* questions = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore: nil];
[questions mapAttributes: @"question_id", @"view_count", nil];  //I don't know your core data model...
[questions hasMany: @"tags" withMapping: nested];
[questions connectRelationship: @"tags" withObjectForPrimaryKeyAttribute: @"tag_id"];

タグ エンドポイントのマッピングの例を次に示します。

RKManagedObjectMapping* tags = [RKManagedObjectMapping mappingForClass: [Tag class] inManagedObjectStore: store];
[tags mapAttributes: @"id", @"name", nil];

知らせ:

1) 各フィードで主キー属性名が異なるため、タグ マップが毎回異なります。

2) コア データの地形がわからないので、これらのマップはそのままでは機能しない可能性があります。あなたは私が何をしているのかを理解し、あなたのアプリケーションのためにやり直す必要があります.

3) 結合テーブルについて心配する必要はありません。これはフレームワークによって処理されます。

于 2012-06-29T15:44:33.427 に答える