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回編集する必要がないためです。私の特定のプロジェクトでは、多くのマッピングがあり、これは厄介です。今すぐ変更するには遅すぎますが、私の間違いから学びましょう。