ViewControllerではない別のクラスからアラートを表示させたいです。
下記のコードで存在しない郵便番号があったらアラートを表示させようとしています。
swift
1import Foundation 2import UIKit 3import GoogleMaps 4 5class PostalCodeConversion: UIViewController{ 6 //CLGeocoderインスタンスを取得(郵便番号を位置情報に変換するAPI) 7 let geocoder = CLGeocoder() 8 static let VC = ViewController() 9 10 func conversion(postalCode: String, mapView: GMSMapView!){ 11 //郵便番号から緯度経度を取得 12 CLGeocoder().geocodeAddressString(postalCode) { placemarks, error in 13 if let lat = placemarks?.first?.location?.coordinate.latitude, 14 let lng = placemarks?.first?.location?.coordinate.longitude{ 15 print("↓検索結果の座標↓") 16 print("緯度 : (lat)") 17 print("経度 : (lng)") 18 let camera = GMSCameraPosition.camera(withLatitude:lat,longitude:lng,zoom:13.0) 19 mapView.animate(to: camera) 20 } 21 else{ 22 print("error") 23 print(Thread.isMainThread) 24 // アラートダイアログを生成 25 let alertController = UIAlertController(title: "エラー",message:"存在しない郵便番号です。", 26 preferredStyle: UIAlertController.Style.alert) 27 // OKボタンの詳細設定 28 let okAction = UIAlertAction(title: "はい",style: UIAlertAction.Style.default, handler: { action in}) 29 // OKボタンを追加 30 alertController.addAction(okAction) 31 // アラートダイアログを表示 32 PostalCodeConversion.VC.present(alertController, animated: true, completion: nil) 33 } 34 } 35 } 36} 37
しかし実行するとこのようにエラーが出力されてダイアログが出てこないです。
[Presentation] Attempt to present <UIAlertController: 0x1030d7000> on <Direction_Sample.ViewController: 0x102578800> (from <Direction_Sample.ViewController: 0x102578800>) whose view is not in the window hierarchy.
調べたところViewControllerクラス以外でpresentは実行できないとのことですがクラス分けしたいためViewControllerクラス以外でpresentを実行したいです。
Thread.isMainThreadはtrueを返しており、メインスレッドであることは確認済みです。
ご教授よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 02:09
2021/04/06 02:36