iOS初心者です。iOS開発の触りしか出来ていないので詳しいことはわからないのですが、画面遷移のときにSegueってやつを使って値を次の画面(ViewController)にパスするときにドハマりした話です。今日Xcodeを8.0にアップデートしたのが原因かもしれません。詳しい方は原因や正しい対処法などコメントしていただけると嬉しいです。
prepareForSegueがオーバーライドできなかった
iOS開発入門書籍の解説に従ってコーディングしていました。画面遷移に伴って別のViewControllerに値をパスするコードを記述する部分にさしかかります。どうもprepareForSegue
というメソッドをオーバーライドして値をパスする処理を書くようです。
参考記事
Swiftでセグエを利用した画面遷移 - Qiita
そこで次のようなコードを記述します。(上の記事より引用)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
var secondViewController:SecondViewController = segue.destinationViewController as SecondViewController
secondViewController.param = self.paramText.text
}
するとこのようなエラーが出てしまいました。
Method does not override any method from its superclass
原因はよくわからないのですが、スーパークラスにこんなメソッドはないとのこと。言われたとおりにやったんですが…なぜ…
応急処置
とりあえずインテリセンスを頼りに、似た名前のメソッドの定義を見ながら代わりになるそれっぽいメソッドを見つけました。あとsegue.destinationViewController
ってのも使えないっぽいのですが、代わりにsegue.destination
というUIViewController
型のプロパティを見つけたのでこれを利用。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var secondViewController:SecondViewController = segue.destination as SecondViewController
secondViewController.param = self.paramText.text
}
書き換えると上手く機能しました。セフセフ。