1. ホーム
  2. ios

[解決済み] 認識できないセレクタがインスタンスに送信される - Swift 4のみ

2022-02-17 06:04:31

質問

このエラーの意味がわからなくて困っています。私のアプリは、Swift 4に移行するまで問題なく動作していました。今、私はこれを得ています tableView:numberOfRowsInSection というエラーが発生します。Swift 3.2 では、これらのエラーは発生しませんでした。numberOfRowsInSectionメソッドは、すべてのケースで実装されており、問題なく表示されます。誰かが正しい方向を示すことができますか?

<ブロッククオート

2017-11-26 10:21:04.973523-0600 Y2GOsp[27701:6382461]です。 -[Y2GOsp.ClientDetailViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fa51c89f000 2017-11-26 10:21:43.328635-0600 Y2GOsp[27701:6382461] *** Terminating app due to. 捕捉されない例外 'NSInvalidArgumentException', reason: '-[Y2GOsp.ClientDetailViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to the インスタンス0x7fa51c89f000'

numberOfRowsInSectionの実装です。

例1:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

例2:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dayAppoints.count
}

解決方法は?

Hamish さんのコメントで問題を特定しました。 あなたは UITableViewDataSource に、あなたの class という宣言があります。 そのため、データソースのメソッドがObjective-Cに公開されませんでした。

私の提案は @objc をメソッドに追加することで、問題を確認しました。

Swift 3でこれがうまくいった理由は、Swift 3で NSObject (どの UIViewController は、Objective-Cで利用可能でした。

Swift 4では (SE-0160による) で明示的にタグ付けする必要があります。 @objc ただし、ベースクラスでそのようにマークされている関数をオーバーライドする場合、あるいはその関数が @objc プロトコルを定義しています。