2017-11-14 3 views
0

をクリックしてエラーの取得:私はスウィフト4.0は、コードをコンパイルするとき、私は、この行にエラーを取得しています、オブジェクト

} as! MKDirectionsHandler) 

エラーを使用していますことは言う:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

は、誰かが助けてください。コードは以下の通りである:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 
    * frame #0: 0x00000001039d5c74 Map`ViewController.getDirections(sender=0x00007fff5c22e610, self=0x00007ff278553bc0) at ViewController.swift:117 
    frame #1: 0x00000001039d6828 Map`@objc ViewController.getDirections(sender:) at ViewController.swift:0 
    frame #2: 0x00000001050d1275 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 83 
    frame #3: 0x000000010524e4a2 UIKit`-[UIControl sendAction:to:forEvent:] + 67 
    frame #4: 0x000000010524e7bf UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 450 
    frame #5: 0x000000010524d6ec UIKit`-[UIControl touchesEnded:withEvent:] + 618 
    frame #6: 0x00000001056ba1a5 UIKit`_UIGestureEnvironmentSortAndSendDelayedTouches + 5560 
    frame #7: 0x00000001056b4045 UIKit`_UIGestureEnvironmentUpdate + 1506 
    frame #8: 0x000000010a912d37 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    frame #9: 0x000000010a912c8e CoreFoundation`__CFRunLoopDoObservers + 430 
    frame #10: 0x000000010a8f7254 CoreFoundation`__CFRunLoopRun + 1572 
    frame #11: 0x000000010a8f69b9 CoreFoundation`CFRunLoopRunSpecific + 409 
    frame #12: 0x0000000107e309c6 GraphicsServices`GSEventRunModal + 62 
    frame #13: 0x00000001050cf5e8 UIKit`UIApplicationMain + 159 
    frame #14: 0x00000001039dac77 Map`main at AppDelegate.swift:12 
    frame #15: 0x000000010d79cd81 libdyld.dylib`start + 1 
    frame #16: 0x000000010d79cd81 libdyld.dylib`start + 1 
+0

calculateメソッドにはオプションの 'MKDirectionsResponse'と' Error'があります。 https://developer.apple.com/documentation/mapkit/mkdirectionshandlerと 'as! '行を削除してください。 MKDirectionsHandler' – Lamar

+0

@Lamarだから私は削除しました! MKDirectionsHandlerと私にエラーが表示されます。 – Ram

+0

エラーは何ですか? – Lamar

答えて

1

をあなたのコード内のいくつかの構文上の問題があります。

@objc func getDirections(sender: AnyObject){ 
     if let selectedPin = selectedPin { 
      let mapItem = MKMapItem(placemark: selectedPin) 
      //let launchOptions = [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving] 
      //mapItem.openInMaps(launchOptions: launchOptions) 

      let request = MKDirectionsRequest() 
      request.source = MKMapItem.forCurrentLocation() 

      request.destination = destination 
      request.requestsAlternateRoutes = false 

      let directions = MKDirections(request: request) 

     directions.calculate(completionHandler: {(response: MKDirectionsResponse!, error: NSError!) in 

      if error != nil { 
       print("Error \(error)") 

      } else { 

       //self.displayRout(response) 

       var overlays = self.mapView.overlays 

       for route in response.routes { 

        self.mapView.add(route.polyline, level: MKOverlayLevel.aboveRoads) 

        for next in route.steps { 
         print(next.instructions) 
        } 
       } 
      } 


      } as! MKDirectionsHandler) 
     } 

    //*********** 
    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! 
    { 
     let draw = MKPolylineRenderer(overlay: overlay) 
     draw.strokeColor = UIColor.purple 
     draw.lineWidth = 3.0 
     return draw 
    } 
    } 

また、ここで私が取得していますエラーがあります。

変更この行:

directions.calculate(completionHandler: {(response: MKDirectionsResponse!, error: NSError!) in 

へ:

directions.calculate(completionHandler: {(response, error) in 

そしてerrorError、ないNSErrorであることに注意してください。

次に、as! MKDirectionsHandlerを取り除いてください。完了ハンドラをキャストする理由はありません。

directions.calculate(completionHandler: { (response, error) in 
     if error != nil { 
      print("Error \(error)") 
     } else { 
      //self.displayRout(response) 

      var overlays = self.mapView.overlays 

      for route in response.routes { 
       self.mapView.add(route.polyline, level: MKOverlayLevel.aboveRoads) 

       for next in route.steps { 
        print(next.instructions) 
       } 
      } 
     } 
    }) 
関連する問題