Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS MapKit从外部文件创建Pin加载_Ios_Mapkit_Coordinates_Mkannotation_Mkpinannotationview - Fatal编程技术网

iOS MapKit从外部文件创建Pin加载

iOS MapKit从外部文件创建Pin加载,ios,mapkit,coordinates,mkannotation,mkpinannotationview,Ios,Mapkit,Coordinates,Mkannotation,Mkpinannotationview,我正在基于MapKit构建一个应用程序。我想创建一定数量的管脚(比如说20个),现在我通过代码指定这些坐标。例如,在我的实现文件中: #define PIN1_LATITUDE 43.504156 #define PIN1_LONGITUDE 12.343405 #define PIN2_LATITUDE 43.451696 #define PIN2_LONGITUDE 12.488599 对于所有20个值,依此类推。问题是,我想根据某个参数加载和显示20个管脚的不同集合。所以我想在外部文

我正在基于MapKit构建一个应用程序。我想创建一定数量的管脚(比如说20个),现在我通过代码指定这些坐标。例如,在我的实现文件中:

#define PIN1_LATITUDE 43.504156 
#define PIN1_LONGITUDE 12.343405

#define PIN2_LATITUDE 43.451696
#define PIN2_LONGITUDE 12.488599
对于所有20个值,依此类推。问题是,我想根据某个参数加载和显示20个管脚的不同集合。所以我想在外部文件中存储pin的坐标,每次加载1组

有可能这样做吗?我应该使用哪种结构?
谢谢大家!

为pin和其他数据创建自定义对象类。并将它们存储在数组或字典中。需要时随时使用。您还可以使用持久存储

h

m

viewcontroller.m

 NSMutableArray *annotationarray = [NSMutableArray alloc]init];

 MapAnnotation *newAnnoataion = [[MapAnnotation allo]init];
 newAnnoataion.latitude = 49.05678;
 newAnnoataion.longitude = 69.05678;
 newAnnoataion.id = 1;
[annotationarray addObject newAnnoataion];
  • 为20针lat和lng值创建PLIST文件或json文件
  • 如果您的应用程序的目标是iOS5及更高版本,您将需要或最好是ios框架类
  • 将文件添加到项目资源文件夹
  • 编写将加载资源文件的代码
下面是一个如何使用JSONKit实现这一点的示例

创建一个json文件,将下面的json示例复制粘贴到一个poi_data.json,加载json文件

    {
        "poi": [
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            }
        ]
    }



    - (void)loadDataFromFile {
        NSString* path = [[NSBundle mainBundle] pathForResource:@"poi_data"
                                                         ofType:@"json"];
        NSString* content = [NSString stringWithContentsOfFile:path
                                                      encoding:NSUTF8StringEncoding
                                                         error:NULL];

        NSDictionary *poiCollection = [content objectFromJSONStringWithParseOptions:JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode error:nil];



            NSArray* pois = [result objectForKey:@"poi"];
                for (NSInteger i = 0; i < [pois count]; i++) {

                    NSDictionary* node = (NSDictionary*)[poi objectAtIndex:i];

                    CGFloat lat = [[node objectForKey:@"lat"] doubleValue];
                    CGFloat lng = [[node objectForKey:@"lng"] doubleValue];
            } 
}
{
“poi”:[
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
},
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
},
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
}
]
}
-(void)loadDataFromFile{
NSString*路径=[[NSBundle mainBundle]路径用于资源:@“poi_数据”
类型:@“json”];
NSString*content=[NSString STRINGWITHCONTENTS文件:路径
编码:NSUTF8StringEncoding
错误:NULL];
NSDictionary*poiCollection=[content objectFromJSONStringWithParseOptions:jkParseOptionNicodeNewlines | jkParseOptionOOseUnicode错误:nil];
NSArray*pois=[result objectForKey:@“poi”];
对于(NSInteger i=0;i<[泊松计数];i++){
NSDictionary*节点=(NSDictionary*)[poi对象索引:i];
CGFloat lat=[[node objectForKey:@“lat”]doubleValue];
CGFloat lng=[[node objectForKey:@“lng”]doubleValue];
} 
}
  • 您还可以使用PLIST并将其加载到NSDictionary中,PLIST非常有用 在可可触感方面得到了很好的支持


记住在后台线程或NSOperation块中运行加载数据代码,你的应用程序可能会崩溃-被springboard踢出-因为加载时间太长。

我不明白。。你能给我举一些例子吗?像这样你可以创造。
 NSMutableArray *annotationarray = [NSMutableArray alloc]init];

 MapAnnotation *newAnnoataion = [[MapAnnotation allo]init];
 newAnnoataion.latitude = 49.05678;
 newAnnoataion.longitude = 69.05678;
 newAnnoataion.id = 1;
[annotationarray addObject newAnnoataion];
    {
        "poi": [
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            }
        ]
    }



    - (void)loadDataFromFile {
        NSString* path = [[NSBundle mainBundle] pathForResource:@"poi_data"
                                                         ofType:@"json"];
        NSString* content = [NSString stringWithContentsOfFile:path
                                                      encoding:NSUTF8StringEncoding
                                                         error:NULL];

        NSDictionary *poiCollection = [content objectFromJSONStringWithParseOptions:JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode error:nil];



            NSArray* pois = [result objectForKey:@"poi"];
                for (NSInteger i = 0; i < [pois count]; i++) {

                    NSDictionary* node = (NSDictionary*)[poi objectAtIndex:i];

                    CGFloat lat = [[node objectForKey:@"lat"] doubleValue];
                    CGFloat lng = [[node objectForKey:@"lng"] doubleValue];
            } 
}