在我看来,Core Data 将是最好的选择。
从长远来看,将大量记录存储在 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];
}
}];
您可以使用 AFNetworking 之类的东西,它会自动将 JSON 响应解析为适当的 NSObject(字典/数组)以供您使用。