为什么MKPointAnnotation不会出现在地图上?

时间:2015-05-13 12:41:53

标签: swift ios8

我有一个地图设置,用这段代码显示注释:

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")
        }
    }

根据控制台,纬度和经度是正确的,代码运行的次数正确,但地图上没有显示注释。我现在花了好几个小时查看这段代码,如果它变得简单,我会感到很愚蠢。无论哪种方式,任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

addAnnotation的文档中,它说:

  

...地图视图保留指定的对象。

这意味着当您调用addAnnotation时,地图视图不仅会为自己保留对该确切对象的引用,还会在调用与注释(例如viewForAnnotation)相关的委托方法时为您提供。 / p>

地图视图需要让您知道完全它正在谈论的注释。

注释对象可以是完全自定义类(只要它们符合MKAnnotation协议),而不是经历可能繁琐,耗时且可能不可能完成副本的任务addAnnotation的对象的em>,它只是保留对那些确切对象的引用。

在问题的代码中,只有第一次调用循环中的addAnnotation才会向地图添加新的注释。

以下调用最终仅修改现有注释的coordinatetitle

现在,如果addAnnotation至少在控制台中给出了一个运行时警告,例如“带有此指针引用的注释已经存在 - 不再添加它”,它可能会很好,但它不会。 / p>

相反,它只是忽略了再添加它的请求。

必须发生的是,添加的一个注释位于数组的最后一个坐标处。


修复方法是为要添加的每个注释创建注释对象的新实例。