我有以下代码:
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事件上添加注释。有人可以纠正我的代码吗?
答案 0 :(得分:0)
警告NSString may not respond to -objectAtIndex
表示lat
和lng
是NSString
个对象(没有objectAtIndex
方法)。
您无需在objectAtIndex
和lat
上调用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。