2015-01-21 2 views
0

Я хотел бы установить местоположение на карте кнопкой, которая принадлежит ячейке в tableView. Дело в том, как получить текущий момент моего ViewController вместо создания нового? Метод в моем CustomCell выглядит следующим образом:Swift - проблема с доступом к mapView из другого класса

@IBAction func mapButton(sender: AnyObject) { 
     ViewController().showPinOnMap(Location) 
    } 
} 

Я в конечном итоге с MAPview равным нулю, я думаю, потому что я instatiate новый ViewContoller вместо того, чтобы получить доступ к тому, который уже существует. Я читал о методах типа, но я не уверен, как с ними бороться. В моем ViewController я попробовал:

class func showPinOnMap(location: CLLocationCoordinate2D?){ 
    if(location != nil){ 
     map.setCenterCoordinate(location!, animated: true) 
    } 
} 

но результаты со следующей ошибкой enter image description here

Я думаю, все дело о доступе к экземпляру ViewController вместо создали совершенно новую (поправьте меня, если я неправильно).

Я был бы признателен за любую помощь, заранее спасибо

+0

Это происходит потому, что вы используете 'map' переменную экземпляра в методе' class' – sage444

+0

Как это исправить? удалить «класс» и остановить метод типа usyng и искать другой подход? – DCDC

+0

Ответ зависит от архитектуры приложения, но если вы хотите использовать только один экземпляр ViewController, попробуйте реализовать singleletone или создать экземпляр каждый раз, когда mapButton нажал – sage444

ответ

2

Вы не зовем реальный экземпляр вашего ViewController, но сам класс. map однако является членом экземпляра ViewController. Чтобы решить эту проблему, вам необходимо позвонить map в соответствующий экземпляр.

Это может быть сделано путем обратного вызова, например. Например. в CustomCell определить переменную:

var onMapButtonCallback : ((CLLocationCoordinate2D) -> Void)? 

который затем можно выполнить из mapButton:

@IBAction func mapButton(sender: AnyObject) { 
    onMapButtonCallback?(Location) 
} 

Дело осталось сделать, это подключить функцию обратного вызова в ViewController, который, я полагаю, конкретизирует также CustomCell:

customCell.onMapButtonCallback = { location in self.showPinOnMap(location) } 
+0

Ничего себе, потрясающий хак! Он работает отлично, но я думаю, мне понадобится время, чтобы полностью понять это решение! Благодаря! – DCDC

+1

Я бы не назвал это взломом. Это обычная картина. –

+0

Для новинок iOS вроде этого выглядит как хак :) Вы имеете в виду, что это общий шаблон для вызова функций из других классов? Или вообще? – DCDC

Смежные вопросы