【问题标题】:MKLocalSearch return 0 valueMKLocalSearch 返回 0 值
【发布时间】:2015-01-05 12:18:06
【问题描述】:

我正在开发一个需要搜索位置并将注释放入地图的 iOS 应用程序。 我编写了以下代码以搜索 Swift 语言。但是,它总是返回 0 值作为响应。

var searchRequest : MKLocalSearchRequest = MKLocalSearchRequest()
        searchRequest.naturalLanguageQuery = address
        searchRequest.region = self.mapView.region

        var search : MKLocalSearch = MKLocalSearch(request: searchRequest)

        var response: MKLocalSearchResponse
        var err : NSError = NSError()
        search.startWithCompletionHandler { (
            response, err) -> Void in
            var placeMarks: NSMutableArray = NSMutableArray()

            for mp in placeMarks{
                placeMarks.addObject(mp)
            }
            self.mapView.removeAnnotations(self.mapView.annotations)
            self.mapView.showAnnotations(placeMarks, animated: true)
        }

我尝试过使用不同的地址、城市名称、州名。但没有帮助。 所以,请帮助我。任何帮助将不胜感激

【问题讨论】:

    标签: ios swift mapkit


    【解决方案1】:

    看看这段代码在做什么:

    var placeMarks: NSMutableArray = NSMutableArray()
    
    for mp in placeMarks{
        placeMarks.addObject(mp)
    }
    

    首先,它创建并初始化一个名为placeMarks的空数组。

    然后,它循环通过placeMarks(它是)并将它自己的对象添加到自身(但该代码永远不会执行,因为数组一开始就是空的)。

    然后,这个空的placeMarks 数组被传递给showAnnotations,它什么都不做(因为数组是空的)。


    相反,代码应该循环遍历response.mapItems 数组,并将该数组中每个MKMapItem 对象中的placemark 添加到placeMarks 数组中。

    此外,代码应在尝试处理 response 之前检查 err 是否为 nil

    最后,responseerr 在调用startWithCompletionHandler 之前的局部变量声明是不必要的。完成处理程序不需要这些变量,完成处理程序搜索在内部创建的那些对象传递给块。


    修改后的代码可能如下所示:

    //var response: MKLocalSearchResponse
    //var err : NSError = NSError()
    
    search.startWithCompletionHandler { (
        response, err) -> Void in
        if (err == nil) {
            var placeMarks: NSMutableArray = NSMutableArray()
    
            for res in response.mapItems {
                if let mi = res as? MKMapItem {
                    placeMarks.addObject(mi.placemark)
                }
            }
    
            self.mapView.removeAnnotations(self.mapView.annotations)
            self.mapView.showAnnotations(placeMarks, animated: true)
        }
    }
    

    【讨论】:

    • 谢谢,我只是评论 var response: MKLocalSearchResponse var err : NSError = NSError() 并且它工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2017-05-23
    相关资源
    最近更新 更多