通过解析器纬度和放大器在地图上添加注释经度值

时间:2011-09-20 14:14:32

标签: iphone objective-c mkannotationview

我有以下代码:

MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.0005;
span.longitudeDelta=0.0005;

CLLocationCoordinate2D location = mapView.userLocation.coordinate;

for (int i = 0; i < [appDelegate.markers count]; i++) {
    marker *aMarker = [appDelegate.markers objectAtIndex:i];


location.latitude = [[aMarker.lat objectAtIndex:i] floatValue];
location.longitude =[[aMarker.lng objectAtIndex:i] floatValue];

region.span=span;
region.center=location;

if(addAnnotation != nil) 
 {
 [mapView removeAnnotation:addAnnotation];
 [addAnnotation release];
 addAnnotation = nil;
 }

 addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:location];
 [mapView addAnnotation:addAnnotation]; 
}

我在XMLparser课程中解析了纬度和经度。现在我想在Map上的buttonclick事件上添加注释。有人可以纠正我的代码吗?

1 个答案:

答案 0 :(得分:0)

警告NSString may not respond to -objectAtIndex表示latlngNSString个对象(没有objectAtIndex方法)。

您无需在objectAtIndexlat上调用lng - 它们是您刚从阵列中检索到的特定marker对象中的值。

(顺便说一下,当你编译代码时,你得到警告 - 而不是像你的评论那样“运行”它。其次,不要忽略编译器警告。在这种情况下,当您运行代码时,您将获得异常:NSInvalidArgumentException - unrecognized selector。)

另一个问题是循环删除之前添加的注释,然后再添加当前注释。如果要将所有标记添加到地图中,这没有意义。目前,它最终只会向地图添加最后一个标记。如果你真的只想添加最后一个标记,那么你不需要遍历数组(只需直接从数组中获取最后一个标记并从中创建一个注释)。

如果您确实想要将所有标记添加到地图中,则循环应如下所示:

for (int i = 0; i < [appDelegate.markers count]; i++)
{
    marker *aMarker = [appDelegate.markers objectAtIndex:i];

    location.latitude = [aMarker.lat floatValue];
    location.longitude =[aMarker.lng floatValue];

    AddressAnnotation *addrAnnot = [[AddressAnnotation alloc] initWithCoordinate:location];
    [mapView addAnnotation:addrAnnot];
    [addrAnnot release];
}

目前尚不清楚您使用region做了什么。如果您尝试设置区域以便地图视图显示所有注释,请查看此问题的答案:iOS MKMapView zoom to show all markers