以下の条件でプロトタイプを作っていて発生した問題。
解決策を先に書くと「 StoryboardからMapViewをセットしない 」ということに。
問題が発生したのは以下のような状況から。
- 簡単な地図アプリ
- StoryBoard利用
- MapViewはStoryBoard上で設置して、ibで接続
map_view_controller.rb
class MapViewController < UIViewController
extend IB
include MapKit
outlet :map, MKMapView
def viewDidLoad
super
# 初期の場所をここで指定するとすると・・・
@map.region = CoordinateRegion.new([35.681382, 139.766084], [3.1, 3.1]) # -> 落ちる!
end
end
それでStoryboardとの接続を切って、すべてコード内で地図を初期化してみたらうまく動きました。
map_view_controller.rb
class MapViewController < UIViewController
include MapKit
def viewDidLoad
@map = MapView.new.tap do |m|
m.frame = view.frame
m.region = CoordinateRegion.new([35.681382, 139.766084], [3.1, 3.1]) # -> うまく動きます
end
view.addSubView @map
end
end
取り敢えずStoryboardでMapViewを定義しないことにします。ふぅ。。。
追記
- StoryboardではUIViewを定義
- そのUIViewのsubViewとしてMapViewをコード上で初期化する
とやれば簡単に解決することに気付きました・・・。
やれやれだぜ。