SwiftUIでMapの引数coordinateRegionにBinding変数を入れると下記のようなエラーが発生した。
環境はxcode14.2、iOS16.2
Publishing changes from within view updates is not allowed, this will cause undefined behavior.
状況としては別のObservableObjectに準拠したクラス内で定義した@Published変数をMapのcoordinateRegionで使用していました。
ざっくり書くと下記の通り
import SwiftUI
import MapKit
struct map : View {
@EnvironmentObject var hoge : Hoge
var body: some view {
Map(coordinateRegion : $hoge.region)
}
}
class hoge : ObservableOblect {
//Mapで表示する領域
@Published var region : MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 35, longitude: 135),
span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
}
上記のようなコードだと、$regionのところで冒頭のようなエラーメッセージが発生しました。
調べたところxcode14から同様の事例があるようで、無視しても良かったんですが、このエラーが出たままマップを移動させるとエラーがどんどん増えていきました。
そこで下記のようにコードを改善しました。
import SwiftUI
import MapKit
struct map : View {
@EnvironmentObject var hoge : Hoge
var body: some view {
//↓.constantを使用
Map(coordinateRegion : .constant(hoge.region))
}
}
class hoge : ObservableOblect {
//Mapで表示する領域
@Published var region : MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 35, longitude: 135),
span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
}
MapのcoordinateRegionに入れる変数を.constant()として代入することでエラーが発生しなくなりました。
この解決法でいいのかわかりませんがとりあえずの解決法としてメモしておきます。
コメント