iOS JSON数组和MapKit [英] iOS JSON Array and MapKit
问题描述
我正在尝试使用MapKit映射JSON数组。我可以使用下面的代码在地图上得到一个点,但是我需要标记几十个引脚,并且我准备了一个JSON数组。我的单点代码如下。
I am trying to map a JSON array using the MapKit. I can get a single point on the map with the code below, but I have dozens of pins I need to mark, and I have a JSON array prepared. My code for a single point is below.
在我的.h文件中:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapViewController : UIViewController {
MKMapView *mapView;
NSData *data;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@end
在我的.m文件中:
NSData *data = @"[{"id":"1","name":"Jiffy Lube","lat":"21.306","lon":"-157.861"},
{"id":"2","name":"Bills
Oil","lat":"21.301","lon":"-157.863"},{"id":"3","name":"Auto Zone","lat":"21.307","lon":"-
157.862"}]";
// parse the JSON into a NSArray
NSError *error;
NSArray *array = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];
推荐答案
您的JSON是一个字典项数组。因此,您只需通过 NSJSONSerialization
检索完整数组,然后遍历生成数组中的字典条目。
Your JSON is an array of dictionary items. So you can just retrieve the full array via NSJSONSerialization
, and then iterate through the dictionary entries in the resulting array.
首先,你最初说你有以下JSON:
First, you originally said you had JSON like the following:
[{"id":"1","name":"Jiffy Lube","lat":"21.306","lon":"-157.861"},
{"id":"2","name":"Bills Oil","lat":"21.301","lon":"-157.863"},
{"id":"3","name":"Auto Zone","lat":"21.307","lon":"-157.862"}]
因此,如果它位于文件中,test.json表示你'包含在您的包中,您可以这样加载:
So, if that's sitting in a file, "test.json" that you've included in your bundle, you could load it as so:
// load the data from local file
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
如果你在网络服务器上有这个,你可以这样检索它:
If you have this on a web server, you'd retrieve it like so:
// load the data from web server
NSURL *url = [NSURL URLWithString:@"http://insert.your.server/and/url/here/test.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// use NSData here
}];
假设您将JSON Feed加载到 NSData
对象名为数据
,你可以这样做:
Assuming you loaded your JSON feed into a NSData
object called data
, you could just do something like:
// parse the JSON into a NSArray
NSError *error;
NSArray *array = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];
if (error != nil)
{
// handle the error as you want
}
// a few variables to be used as we iterate through the array of results
CLLocationCoordinate2D location; // coordinates of the annotation
NSMutableArray *newAnnotations = [NSMutableArray array]; // an array in which we'll save our annotations temporarily
MKPointAnnotation *newAnnotation; // the pointer to the annotation we're adding
// iterate through the array, adding an annotation to our our array of new annotations
for (NSDictionary *dictionary in array)
{
// retrieve latitude and longitude from the dictionary entry
location.latitude = [dictionary[@"lat"] doubleValue];
location.longitude = [dictionary[@"lon"] doubleValue];
// create the annotation
newAnnotation = [[MKPointAnnotation alloc] init];
newAnnotation.title = dictionary[@"name"];
newAnnotation.coordinate = location;
// add it to our array
//
// incidentally, generally I just add it to the mapview directly, but
// given that you have a didAddAnnotationViews, we'll just build up
// an array and add them all to the map view in one step after we're
// done iterating through the JSON results
[newAnnotations addObject:newAnnotation];
// clean up
[newAnnotation release];
}
// when done, add the annotations
[self.mapView addAnnotations:newAnnotations];
这篇关于iOS JSON数组和MapKit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!