Swift 2.x не может установить область MapView
Это как 5 часов, я придерживаюсь этого вопроса. Я недавно начал Swift, не могу сказать, что мне это нравится, и у меня возникают проблемы после проблем. Я пытаюсь сделать очень простую вещь. У меня есть класс, который имеет дату (NSDate), длительность (NSTimeInterval), locationName(String) и locationMapView(MKMapView). Он не реализует никакого протокола. Я хочу в моем инициализаторе получить координаты и установить его в MapView. Я нашел несколько руководств о том, как это сделать, но бывает, у меня есть проблемы с основной вещью. Я даже не могу установить регион. Вот фрагмент init:
self.locationMapView = MKMapView();
let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 34.03, longitude: 118.14)
let span = MKCoordinateSpanMake(100, 80)
let region = MKCoordinateRegionMake(coordinate, span)
self.locationMapView!.setRegion(region, animated: true)
print(String(region))
print("---")
print(String(locationMapView!.region))
А вот что отображается в консоли:
MKCoordinateRegion(center: __C.CLLocationCoordinate2D(latitude: 34.03, longitude: 118.14), span: __C.MKCoordinateSpan(latitudeDelta: 100.0, longitudeDelta: 80.0))
---
MKCoordinateRegion(center: __C.CLLocationCoordinate2D(latitude: nan, longitude: nan), span: __C.MKCoordinateSpan(latitudeDelta: 0.0, longitudeDelta: 0.0))
Мне потребовалось некоторое время, чтобы понять, что значения не назначены, но я понятия не имею, почему. Я нашел этот код во многих ответах и руководствах. Что не так с моей реализацией?
Спасибо всем за помощь, и мне жаль, если это что-то глупое.
2 ответа
Проблема в этой строке:
self.locationMapView = MKMapView();
Вы создали вид карты, но не назначили ему фрейм. Таким образом, он имеет нулевой размер. Таким образом, у него не может быть региона.
ЧАСТИЧНЫЙ ОТВЕТ:
Я копаю немного глубже и думаю, что у меня есть ответ. Кажется, вы ничего не можете назначить объекту MKMapView, если он не подключен напрямую к дисплею (через розетку).
То, что я сделал, удалило все, что связано с MapView, из моего класса и переместило его в класс на основе UITableViewCell, который содержит выход к конкретному MapView. Там я был в состоянии назначить координаты, и все работало как задумано.
ПРИМЕЧАНИЕ. Вы по-прежнему не можете работать с дополнительной переменной, такой как tempMapView, а затем назначить ее фактическому MapView. Это не сработает.
Я надеюсь, что помог людям, которые столкнулись с той же проблемой, что и я. Если кто-то знает, почему вы не можете работать с MapView, который напрямую не связан с дисплеем, или как его обойти, пожалуйста, дайте мне знать.