質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

782閲覧

地図で検索地点を表示したい

takaat

総合スコア4

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/12/11 23:05

前提・実現したいこと

地図でユーザーが検索した地点を表示するようにしたいです。

発生している問題・エラーメッセージ

検索を実行するとRuntimeエラーが発生して、地図が更新されません。検索処理までは、データが入っているのでできているようです。

[SwiftUI] Modifying state during view update, this will cause undefined behavior.

該当のソースコード

SwiftUI

1struct ContentView: View { 2 3 @ObservedObject var coordinates = Coordinates.shared 4 @State private var inputText = "" 5 @State private var userTrackingMode: MapUserTrackingMode = .follow 6 7 var body: some View { 8 VStack{ 9 Map(coordinateRegion: $coordinates.region, interactionModes: .all, showsUserLocation: true, userTrackingMode: $userTrackingMode) 10 TextField("", text: $inputText, prompt: Text("場所を入力")) 11 .padding() 12 .onSubmit { 13 coordinates.localSearch(inputRegion: coordinates.region, inputText: inputText, completion: {targetRegion in 14 coordinates.region.center = targetRegion 15 }) 16 } 17 } 18 } 19} 20 21class Coordinates: ObservableObject { 22 23 public static let shared = Coordinates() 24 @Published var region: MKCoordinateRegion 25 26 init() { 27 region = MKCoordinateRegion(center: CLLocation().coordinate, latitudinalMeters: 500, longitudinalMeters: 500) 28 } 29 30 func localSearch(inputRegion: MKCoordinateRegion,inputText: String,completion: @escaping (CLLocationCoordinate2D) -> Void) { 31 let searchRequest = MKLocalSearch.Request() 32 searchRequest.naturalLanguageQuery = inputText 33 searchRequest.region = inputRegion 34 let search = MKLocalSearch(request: searchRequest) 35 search.start(completionHandler: {(response,error) in 36 guard let targetRegion = response?.mapItems.first?.placemark.coordinate else { return print("検索失敗!")} 37 completion(targetRegion) 38 }) 39 } 40}

試したこと

下記のホームページによれば、Viewの更新中にデータの修正をしようとしている事が原因らしいです。HPを参考にコードを修正しましたが、同じエラーが出てしまいます。
リンク内容

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問