0

既存の iOS アプリに出会いました。Web サービスから JSON をダウンロードし、実行時に JSON をマップ アノテーション オブジェクトに解析してマップに表示します。約 2000 レコードしかないため、これは比較的高速です。

問題は、「[日付] から更新された」レコードを要求して、レコードを更新/削除したいということです。これらのレコードを取得すると、JSON を更新する方法がわかりません。

唯一のオプションの 1 つは、マップ ポイントを作成する前にオブジェクトを SQLite などに保存することだと思います。その後、SQLite レコードが更新され、注釈を再作成するだけです。

誰かがより良いアイデアを持っていますか?可能であれば、元の JSON のみのアプローチを維持したい

4

2 に答える 2

0

私の意見では、コアデータが最善の方法です。

大量のレコードを plist またはプレーンな JSON に保存することは、長期的には良い考えではありません。Core Data を使用すると、レコードを簡単に取得し、必要に応じてレコードを更新および削除できます。データを更新したら、アノテーションを使用してマップを再取得および更新できます。

データを NSManagedObjects にマッピングするのに役立つ MagicalRecord を調べる必要があります。

たとえば、次の JSON を使用します。

result: [
        { longitude: ...,
          latitude: ...,
          locationName: ...
        },
        { longitude: ...,
          latitude: ...,
          locationName: ...
        }
        ],
 status: "ok"

次の属性を持つ NSManagedObject を作成できます。

MyLocationObject:
longitude (double)
latitude (double)
locationName (string)

次に、MagicalRecord を使用して、次のようにしてオブジェクトを解析して保存します。

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
     // loop through all the locations
     for (NSDictionary *locationDictionary in [response objectForKey:@"result"]) {
         // first we will do a fetch in the database to see if we already have the object
         // I am using the location name as a reference but if you have a unique ID in the JSON, use that instead
         MyLocationObject *locationObject = [MyLocationObject findFirstByAttribute:@"locationName" withValue:[locationDictionary objectForKey:@"locationName"];
         // if locationObject is nil we need to create a new record
         if (!locationObject) {
             locationObject = [MyLocationObject createInContext:localContext];
         }
         // now simple map the JSON to the object
         [locationObject importValuesForKeysWithObject:locationDictionary];
     }
}];

JSON 応答を適切な NSObject (辞書/配列) に自動的に解析する AFNetworking のようなものを使用できます。

于 2012-10-25T00:42:37.643 に答える
0

ローカルの JSON コピーの作成日/変更日を使用して、新しい JSON を解析するときに古いレコードを無視しないのはなぜですか? これは、JSON と XML の両方のデータ フィードに対していくつかのアプリで使用したアプローチであり、常に ccharm のように機能します。

于 2012-10-24T21:52:20.850 に答える