回答編集履歴

1

追記

2021/04/06 02:07

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -19,3 +19,71 @@
19
19
  }
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ > 調べたところViewControllerクラス以外でpresentは実行できない
26
+
27
+
28
+
29
+ ところで、これはまあそうなのですが、これは問題の本質ではないですね。
30
+
31
+ ViewControllerの上に別のViewControllerをpresentするとき、
32
+
33
+
34
+
35
+ - 基礎となる側のViewControllerが、View Hierarchyの中に存在していること
36
+
37
+ - 基礎となる側のViewControllerが、View Hierarchyの一番上 (上に別のViewControllerがpresentされていない) にあること
38
+
39
+
40
+
41
+ の2点が必要で、この1点目が満たされていないとエラーメッセージは指摘しています。
42
+
43
+
44
+
45
+ `PostalCodeConversion.VC.present(_,animated:,completion:)` で呼び出そうとしていますが、 PostalCodeConversion.VC は次の行で `static` で宣言されていますね。
46
+
47
+ ```swift
48
+
49
+ class PostalCodeConversion: UIViewController{
50
+
51
+ //CLGeocoderインスタンスを取得(郵便番号を位置情報に変換するAPI)
52
+
53
+ let geocoder = CLGeocoder()
54
+
55
+ static let VC = ViewController() // <-
56
+
57
+ ```
58
+
59
+
60
+
61
+ なぜstaticで宣言しているのかわかりませんが、staticを外して、PostalCodeConversionのインスタンスを生成しているViewController側で次のような感じにしてもいいと思います
62
+
63
+ ```swift
64
+
65
+ // 基礎となる側
66
+
67
+ let conversion = new PostalCodeConversion()
68
+
69
+ conversion.VC = self
70
+
71
+
72
+
73
+ // PostalCodeConversion側
74
+
75
+ // OKボタンの詳細設定
76
+
77
+ let okAction = UIAlertAction(title: "はい",style: UIAlertAction.Style.default, handler: { action in})
78
+
79
+ // OKボタンを追加
80
+
81
+ alertController.addAction(okAction)
82
+
83
+ // アラートダイアログを表示
84
+
85
+ self.VC.present(alertController, animated: true, completion: nil)
86
+
87
+ // ^^^^
88
+
89
+ ```