iOS7-触摸屏幕后,地图视图pin才会显示

iOS7-触摸屏幕后,地图视图pin才会显示,ios,ios7,mkmapview,Ios,Ios7,Mkmapview,在我的应用程序中,我使用json从web服务下载了一组点。 在iOS7上实现应用程序时,我正在试验这个问题:位置是下载的,但地图上的针脚在用户触摸并“移动”地图之前不会绘制。然后它们出现,并且都像iOS6一样工作 我怎样才能纠正这种行为 编辑: AddAnnotation在接收数据、解析json并将其传递给MyLocation对象的方法末尾调用: - (void)plotBarPosition:(NSString *)data_string { // Parse the string i

在我的应用程序中,我使用json从web服务下载了一组点。 在iOS7上实现应用程序时,我正在试验这个问题:位置是下载的,但地图上的针脚在用户触摸并“移动”地图之前不会绘制。然后它们出现,并且都像iOS6一样工作

我怎样才能纠正这种行为

编辑: AddAnnotation在接收数据、解析json并将其传递给MyLocation对象的方法末尾调用:

- (void)plotBarPosition:(NSString *)data_string {
    // Parse the string into JSON
    NSDictionary *json = [(NSDictionary*)[datos_string1 JSONValue]objectForKey:@"features"];

    for (int i = 0; i < [json count]; i++){

      /*
      PARSING EACH POINT
      */

    MyLocation *location =[[MyLocation alloc] initWithName:nameLoc coordinate:coordinate estado:status antenaId:antenaId];

    [_mapView addAnnotation:location];
     }

}   

但是在这种情况下,注释根本不会出现。

有一个协议MKAnnotation-您必须确定自己的注释类,以实现该协议:

@interface MyAnnotation : NSObject <MKAnnotation> {
    CLLocationCoordinate2D coordinate;
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate;
也试着打电话

[mapView setNeedsDisplay];
or
[mapView setNeedsLayout];
按照@RAJA的建议添加注释后,在主线程上调用
addAnnotation:
addAnnotations:
。您可以使用GCD或
performSelectorOnMainThread
执行此操作

对现有代码更改最少的选项是调用
addAnnotation:
(单数):


下载是否在后台线程上完成,addAnnotation调用是否也在后台线程上完成?看,谢谢你,安娜。我试过了,但运气不好。我只是更新我的问题,如果可能有用的话。在数组中添加注释对象并分配给-addAnnotations:
[myMapView addAnnotations:annotationArray]也来自行[\u mapView performSelectorOnMainThread:@selector(addAnnotations:)with object:location waitUntilDone:NO];对象应该是数组。不是我的位置您可以分享您正在使用的关于mapview的代码片段吗。谢谢@RAJA。我尝试添加NSMUTABLEARRAY,但如果用户不触摸屏幕,pin仍然不会出现。问题出现在iOS7中。为iOS6编译时,在不使用touchTx@Anna的情况下出现引脚。这两种解决方案解决了我的问题。哪一个更高效?如果“高效”是指对UI有好处,那么我会使用一种方法,首先将注释添加到本地数组,然后使用addAnnotations(复数)一次性添加所有注释——第二种解决方案。
MyAnnotation *annotation = [[MyAnnotation alloc] initWithCoordinate:CLLocationCoordinate2DMake(latitude, longitude)];
[myMap addAnnotation:annotation];
[mapView setNeedsDisplay];
or
[mapView setNeedsLayout];
- (void)plotBarPosition:(NSString *)data_string {
    // Parse the string into JSON
    NSDictionary *json = [(NSDictionary*)[datos_string1 JSONValue]objectForKey:@"features"];

    for (int i = 0; i < [json count]; i++){

        /*
         PARSING EACH POINT
         */

        MyLocation *location =[[MyLocation alloc] initWithName:nameLoc coordinate:coordinate estado:status antenaId:antenaId];

        //[_mapView addAnnotation:location];
        [_mapView performSelectorOnMainThread:@selector(addAnnotation:) 
                                   withObject:location 
                                waitUntilDone:YES];
    }
}
- (void)plotBarPosition:(NSString *)data_string {
    // Parse the string into JSON
    NSDictionary *json = [(NSDictionary*)[datos_string1 JSONValue]objectForKey:@"features"];

    //>>> initialize array to hold annotations...
    NSMutableArray *annotationsToAdd = [NSMutableArray array];

    for (int i = 0; i < [json count]; i++){

        /*
         PARSING EACH POINT
         */

        MyLocation *location =[[MyLocation alloc] initWithName:nameLoc coordinate:coordinate estado:status antenaId:antenaId];

        //>>> comment out direct addAnnotation...
        //[_mapView addAnnotation:location];

        //>>> add annotation to local array...
        [annotationsToAdd addObject:location];
    }

    //>>> call addAnnotations: (plural) on main thread...
    [_mapView performSelectorOnMainThread:@selector(addAnnotations:) 
                               withObject:annotationsToAdd 
                            waitUntilDone:YES];
}