我有一个地图设置,用这段代码显示注释:
var newAnnotation = MKPointAnnotation()
if newPostJustPosted {
var newPostCoordinate = CLLocationCoordinate2DMake(userPosts.last!.postLatitude, userPosts.last!.postLongitude)
newAnnotation.coordinate = newPostCoordinate
newAnnotation.title = userPosts.last!.postTitle
mainMapView.addAnnotation(newAnnotation)
newPostJustPosted = false
println("New post was just posted")
}
这没有问题,并且注释显示出来。在此之后,我尝试通过以下代码放置一系列注释:
if userPosts.count > 0 {
for eachPost in 0...userPosts.count - 1 {
var currentPost = userPosts[eachPost]
newAnnotation.coordinate = CLLocationCoordinate2DMake(currentPost.postLatitude, currentPost.postLongitude)
println("Latitude is: " + "\(currentPost.postLatitude)")
newAnnotation.title = currentPost.postTitle
mainMapView.addAnnotation(newAnnotation)
println("This Ran")
}
}
根据控制台,纬度和经度是正确的,代码运行的次数正确,但地图上没有显示注释。我现在花了好几个小时查看这段代码,如果它变得简单,我会感到很愚蠢。无论哪种方式,任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
在addAnnotation
的文档中,它说:
...地图视图保留指定的对象。
这意味着当您调用addAnnotation
时,地图视图不仅会为自己保留对该确切对象的引用,还会在调用与注释(例如viewForAnnotation
)相关的委托方法时为您提供。 / p>
地图视图需要让您知道完全它正在谈论的注释。
注释对象可以是完全自定义类(只要它们符合MKAnnotation
协议),而不是经历可能繁琐,耗时且可能不可能完成副本的任务传递给addAnnotation
的对象的em>,它只是保留对那些确切对象的引用。
在问题的代码中,只有第一次调用循环中的addAnnotation
才会向地图添加新的注释。
以下调用最终仅修改现有注释的coordinate
和title
。
现在,如果addAnnotation
至少在控制台中给出了一个运行时警告,例如“带有此指针引用的注释已经存在 - 不再添加它”,它可能会很好,但它不会。 / p>
相反,它只是忽略了再添加它的请求。
必须发生的是,添加的一个注释位于数组的最后一个坐标处。
修复方法是为要添加的每个注释创建注释对象的新实例。