私の意見では、コアデータが最善の方法です。
大量のレコードを 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 のようなものを使用できます。