Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios nils在MKLocalSearch请求中找到了展开可选值_Ios_Swift_Xcode8.1 - Fatal编程技术网

Ios nils在MKLocalSearch请求中找到了展开可选值

Ios nils在MKLocalSearch请求中找到了展开可选值,ios,swift,xcode8.1,Ios,Swift,Xcode8.1,使用iPhone6,Xcode 8.1,运行iOS 10.1.1,执行下面的Swift代码,我间歇性地得到致命错误:在这个简单的代码中意外地发现了nil unwrapping可选值 它在大约50%的时间内都能正常工作,这让我相信它与搜索调用需要更长时间才能完成有关,正如我发现的类似MapKit问题的一些解决方案中所建议的那样。但是错误似乎发生在不包含可选值的完成处理程序中,因此我不明白如何得到零结果 代码片段和控制台输出如下所示。如有任何见解,将不胜感激 class ViewController

使用iPhone6,Xcode 8.1,运行iOS 10.1.1,执行下面的Swift代码,我间歇性地得到
致命错误:在这个简单的代码中意外地发现了nil unwrapping可选值

它在大约50%的时间内都能正常工作,这让我相信它与搜索调用需要更长时间才能完成有关,正如我发现的类似MapKit问题的一些解决方案中所建议的那样。但是错误似乎发生在不包含可选值的完成处理程序中,因此我不明白如何得到零结果

代码片段和控制台输出如下所示。如有任何见解,将不胜感激

class ViewController: UIViewController, UISearchBarDelegate, MKMapViewDelegate,UINavigationControllerDelegate {
    var searchController:UISearchController!


func searchBarSearchButtonClicked(_ searchBar: UISearchBar){
    //1
    print("Entered searchBarSearchButtonClicked")
    searchBar.resignFirstResponder()
    dismiss(animated: true, completion: nil)
    if self.mapView.annotations.count != 0{
        annotation = self.mapView.annotations[0] // both are type MKAnnotation
        self.mapView.removeAnnotation(annotation)
    }

    //2 make 1st search request
    print("Make 1st search request")
    let localSearchRequest1 = MKLocalSearchRequest()
    localSearchRequest1.naturalLanguageQuery = searchBar.text
    print("localSearchRequest1 initialized")

    let localSearch1 = MKLocalSearch(request: localSearchRequest1)
    localSearch1.start(completionHandler: {(response, error) in

        if error != nil {
            print("Error occured in search:\(error!.localizedDescription)")
        } else  {

        //3 make annotation pin
        print("make annotation pin")
        self.pointAnnotation = MKPointAnnotation()
        print(searchBar.text ?? "searchBarText")
        self.pointAnnotation.title = searchBar.text
        print(response!.boundingRegion.center.latitude)
        self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: response!.boundingRegion.center.latitude,           longitude:     response!.boundingRegion.center.longitude)
        self.coord1 = self.pointAnnotation.coordinate

        self.placeMark1 = MKPlacemark(coordinate: self.pointAnnotation.coordinate, addressDictionary: nil)


        self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil)
        self.mapView.centerCoordinate = self.pointAnnotation.coordinate
        self.mapView.addAnnotation(self.pinAnnotationView.annotation!)
        self.searchButtonClicked += 1

    }
})
****控制台日志****


检查您的
响应
对象不是可选值

如果要使用
response!。boundingRegion.center.latitude
,使用
guard let response=response else
确保
response
不是
nil

更新 我在初始化
localSearch1
时重写了代码,希望对您有所帮助

guard let localSearch1=MKLocalSearch(请求:localSearchRequest1)else{ //localSearch1在这里为零 返回 }


另外,您应该知道,在Swift中,
self
可以省略。

哪一行准确地抛出此错误?似乎抛出错误的行是“localSearch1.start”,因为控制台日志打印“localSearchRequest1 initialized”,但从不打印“make annotation pin”。我尝试了一下,并将代码更改为以下内容,但仍然会出现间歇性的零展开错误。
guard@davidwoj55再次检查其他属性。更喜欢使用
var searchController:UISearchController?
定义时我也尝试了一下,但仍然得到两个致命错误。@davidwoj55确保所有内容都已初始化!因为我已经用print语句将localSearch实例化和localSearch1.start调用括起来,并且在它们后面的print语句执行之前得到了nil错误,这难道不意味着nil必须在搜索完成处理程序或localSearch1常量中吗?我还可以如何隔离这些错误?非常感谢。
Entered showSearchBar

Presented searchController

2016-11-24 22:07:41.409907 MapLocator 3 Match[1116:587460] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles

2016-11-24 22:07:41.420495 MapLocator 3 Match[1116:587460] [MC] Reading from public effective user settings.

Entered searchBarSearchButtonClicked

Make 1st search request

localSearchRequest1 initialized

fatal error: unexpectedly found nil while unwrapping an Optional value

2016-11-24 22:07:46.072037 MapLocator 3 Match[1116:587460] fatal error: unexpectedly found nil while unwrapping an Optional value
localSearch1.start(completionHandler: {(response, error) in

    if error != nil {
        // Has an error, return
        print("Error occured in search:\(error.localizedDescription)")
        return
    }

    guard let response = response else {
        // response = nil, return
        print("No response data")
        return
    }

    // Make annotation pin
    self.pointAnnotation = MKPointAnnotation()

    self.pointAnnotation.title = searchBar.text ?: ""
    self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: response.boundingRegion.center.latitude,
                                                            longitude: response.boundingRegion.center.longitude)
    self.coord1 = self.pointAnnotation.coordinate
    self.placeMark1 = MKPlacemark(coordinate: self.pointAnnotation.coordinate, addressDictionary: nil)

    self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil)
    self.mapView.centerCoordinate = self.pointAnnotation.coordinate
    self.mapView.addAnnotation(self.pinAnnotationView.annotation!) // I don't know whether this annotation is nil or not
    self.searchButtonClicked += 1
}