iOS JSON数组和MapKit [英] iOS JSON Array and MapKit

查看:100
本文介绍了iOS JSON数组和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆