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, который напрямую не связан с дисплеем, или как его обойти, пожалуйста, дайте мне знать.

Другие вопросы по тегам