Аннотации MapKit, отслеживающие маршруты и использующие prepareForSegue

Я использую MapKit в своем приложении, и мне нужно было перетащить булавку в определенное место и в другой контроллер представления, когда у меня будет возможность нарисовать маршрут к этой булавке. Итак, я использую этот фантастический учебник, но у меня проблемы с его прохождением. информация с 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)
}

потому что, как мне грустно, я хочу «openInMapsWithLaunchOptions» в другом ViewController, чей идентификатор — «GoRestaurant». Итак, я сделал prepareForSegue, чтобы отправить «местоположение» и «параметры запуска».

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'

Я столько раз пытался инициализировать по-разному, но понятия не имею, кто это исправляет. Пожалуйста, кто-нибудь... Спасите мою жизнь, помогите мне с этим!


person Gustavo Isidio    schedule 22.12.2015    source источник
comment
попробуйте с var location: Place = Place()   -  person Muneeba    schedule 22.12.2015
comment
Это именно то, что я делаю   -  person Gustavo Isidio    schedule 22.12.2015
comment
В вашем коде инициализация переменной местоположения дает ошибку. вы должны указать имя класса перед фигурными скобками для правильной инициализации после знака равенства   -  person Muneeba    schedule 22.12.2015
comment
Мужик, извини. Я неправильно прочитал ваше предложение. Я пробовал с var location: Place = Place(), но это тоже не сработало. Отсутствует аргумент для параметра «заголовок» в вызове Итак, я пытаюсь передать аргументы через prepareForSegue... Но я не смог. Не сработало :(   -  person Gustavo Isidio    schedule 22.12.2015
comment
Ошибка устранена, верно? Вы не получаете значение местоположения в контроллере представления вашего ресторана?   -  person Muneeba    schedule 22.12.2015
comment
Неа. Теперь ошибка Отсутствует аргумент для параметра «заголовок» в вызове   -  person Gustavo Isidio    schedule 22.12.2015
comment
Это потому, что у вашего метода инициализации есть входной параметр. напишите это местоположение var: Place = Place (название: ваш титул, locationName: местоположение, дисциплина: дисциплина, координата: ваша координата)   -  person Muneeba    schedule 22.12.2015
comment
Ага. Я знаю. Что вы предлагаете? Чем я тоже посылаю этому viewController свой параметр? Я пробую это. Как мне грустно, я пытаюсь передать аргументы (параметры) через prepareForSegue, но не могу. Не работает   -  person Gustavo Isidio    schedule 22.12.2015
comment
Чувак, я понимаю. Я снова пытаюсь передать параметры через prepareForSegue, и теперь моя единственная ошибка (goo.gl/HAF1aX). Шрифт этих параметров: (goo.gl/ZcU5vm).   -  person Gustavo Isidio    schedule 22.12.2015
comment
Хорошо .. это новая вещь в Swift с Xcode 7 . Напишите код инициализации местоположения внутри viewDidLoad, он будет работать. Подробности смотрите по этой ссылке. stackoverflow.com/questions/33055147/   -  person Muneeba    schedule 23.12.2015