2

WebAPIからCoreDataにデータをインポートおよびエクスポートするために作業しています。

私がインターフェースしているWebAPIは、それ自体と一貫した命名規則を持っておらず、コアデータモデルの属性に使用する命名規則とは確かに一致していません。(API規則の変更を制御することはできません)。

この問題を説明するために、1つのAPI呼び出しで、連絡先のデータは次のようになります。

"rows": [
    {
        "name": "Bob",
        "group": "Testing Group A",
        "email_address" : "bob@fakedata.com"
    }
]

そして、まだ連絡先を返す別の別の呼び出しでは、次のようになります。

"rows": [
    {
        "Name": "Bob",
        "group_name": "Testing Group A",
        "Email" : "bob@fakedata.com"
    }
]

キーの命名の小さな違いに気づきましたか?過去に、API呼び出しごとに「マッピング」を行うことで、このような問題を解決しました。マッピングは、私が使用するコアデータ名のキーとAPIサーバーキーの値を持つ単なるNSDictionaryです。

したがって、これら2つの呼び出しのそれぞれを解決するには、それぞれに次のようなNSDictionaryが必要です。

dict = @{ @"name" : @"name", @"group" : @"group", @"email" : @"email_address" };

dict = @{ @"name" : @"Name", @"group" : @"group_name", @"email" : @"Email" };

これは非常にうまく機能し、この問題を解決するための1つの方法ですが、すべてのAPI呼び出しでこれらのマッピングを使用することはあまり洗練されておらず、コードの保守性を高めるための設計としては不十分です。

したがって、ここでの本当の質問は、WebAPIのコアデータへのマッピングを管理するためのより良いソリューションを誰かが持っているかどうかです。明らかに、適切に記述されたWeb APIを使用することが理想的なソリューションですが、適切に記述されたAPIをマッピングする場合でも、わずかな違いが生じる可能性があります(たとえば、コアデータには小文字で始まる属性が必要です)。

私の提案する解決策は、「ユーザー情報」(例を示すために下の添付画像)の下のコアデータ属性にマッピングを追加することですが、属性のこの機能を使用した経験はなく、方法があるかどうかわかりません私が見落としていたより良いオプション。助けてくれてありがとう。

ここに画像の説明を入力してください

追記:はい、私はRestkitを広範囲に使用しましたが、便利なマッピングがあります(上記のNSDictionaryを使用して説明した方法と同様です)。しかし、このプロジェクトでは、私が制御できず、完全に理解していないようなフレームワークへの依存を排除​​しています。単純なNSURLConnectionを使用してこのデータを取得しています。

更新 このルートをたどると(これは非常に良いことですが、受け入れられた回答は大いに役立ちました)。デフォルトではないという理由だけで、キーワード「マップ」を使用しないことをお勧めします。代わりに「キー」を使用してください。これは、ユーザー情報フィールドを2回編集する必要がないためです。私の特定のプロジェクトでは、多くのマッピングがあり、これは厄介です。今すぐ変更するには遅すぎますが、私の間違いから学びましょう。

4

1 に答える 1

2

うわー、それは1つのめちゃくちゃなWebAPIです。

あなたの提案するアプローチは、多かれ少なかれ私がそれに対処する方法です。ただし、複数のキーを使用する代わりに、値がカンマ区切りのマッピングリストでmapXある単一のキーを使用します。mapこの場合、キーmapの値は。になりCompany,Company_Name,companyます。そうすれば、次のキーが存在するかどうかを繰り返しテストする代わりに、1つの既知のキーを読み取ることができます。NSStringcomponentsSeparatedByString:メソッドを使用すると、カンマ区切りのリストを配列に簡単に変換できます。

別のアプローチは、実行時に読み取ることができるプロパティリストにこれらすべてを配置することです。それは効果的ですが、私はすべての情報を1つの場所に保持することを好み、ユーザー情報辞書が理想的です。

余談ですが、Core Dataでは、属性名が小文字で始まる必要はありません。ただし、Xcodeのデータモデルエディタはその制限を強制します。つまり、違反の原因となる可能性のあるガイドラインに従う必要があります。気になる場合は、モデルファイルを手動で編集し、属性名を大文字で始まるように変更できます。ファイルはXMLであり、ツールの互換性設定がXcode 4.0以降であれば、非常に読みやすくなっています。これを行うと、これらの属性でXcodeの組み込みクラス生成を使用することもできます。

于 2013-01-14T19:22:19.437 に答える