0

私はMapKit自分のアプリで使用していますが、そのピンへのルートを描画するオプションがあるときに、特定の場所と別のView Controllerにピンをドロップする必要がありました。だから、私はこの素晴らしいチュートリアルを使用していますが、情報を渡すのに問題がありますprepareForSegue

class Place: NSObject, MKAnnotation {
    // This class creates the map annotation who have the place's location and some information about it
    let title: String?
    let locationName: String
    let discipline: String
    let coordinate: CLLocationCoordinate2D 
    // The title and the subtitle will appear when the user touches in a pin from a specific place.
    init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
        self.title = title
        self.locationName = locationName
        self.discipline = discipline
        self.coordinate = coordinate
        super.init()
    }
    // The title will be the place's name and in the subtitle will appear where is the location
    var subtitle: String? {
        return locationName
    }
}

したがって、Map の ViewController では、ユーザーがannotationこの情報ボタンをタップした場合にマップ ピンをタップしたときに、この関数がどのように機能するかを示しています。

func mapView(mapView: MKMapView, annotationView view: MKAnnotationView,
            calloutAccessoryControlTapped control: UIControl) {

       let location = view.annotation as! Place
       let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]
                           location.mapItem().openInMapsWithLaunchOptions(launchOptions)
 }

だから私はこれを変更しますfunc

func mapView(mapView: MKMapView, annotationView view: MKAnnotationView,
        calloutAccessoryControlTapped control: UIControl) {
      let location = view.annotation as! Place
      let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]
      performSegueWithIdentifier("GoRestaurant", sender: self)
}

悲しいことに、「GoRestaurant」という識別子の別のViewControllerで「openInMapsWithLaunchOptions」を使いたいからです。だから私はprepareForSegue「場所」と「launchOptions」を送信するようにしました

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var showPlace: RestaurantsViewController = segue.destinationViewController as! RestaurantsViewController

        showPlace.location = location
        showPlace.launchOptions = launchOptions
}

しかし、RestaurantsViewController場所を「インポート」しようとすると機能しません。

var locationName: String = "" //ok, no error
var location: Place = () //error: Cannot convert value of type '()' to specified type 'Place'

さまざまな方法で何度も初期化を試みましたが、誰がそれを修正したのかわかりません。お願い、誰か..私の命を救ってくれ!

4

0 に答える 0