問題の解決策はすでに知っていますが、ここで何が起こっているのか本当にわかりません。UITableViewController
セルを取り込んで、didSelectRow
それを他の関数の何かに使用する があります。としてセルを渡しAnyObject?
ます。ここで、詳細な VC にドリルダウンしてから再度バックアップし、これらの手順をさらに 2 回繰り返すと、アプリがクラッシュします。
最初は自分のアプリのどこかに問題があると思っていましたが、その数行だけでサンプル プロジェクトを作成し、バグを再現することができました。私はすでにレーダーを提出しましたが、私は捨てたくありません (レーダーの人たちからの返事は決してないので) ;) 誰か私にここで何が起こっているのか説明してもらえますか!
final class MasterViewController: UITableViewController {
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let cell = tableView.cellForRow(at: indexPath)
doSomethingWith(sender: cell)
}
}
extension MasterViewController {
func doSomethingWith(sender: AnyObject?) {
// I don't even use that sender!!!
// If the function would read doSomethingWith(sender: Any?) everything would be ok!
}
}
必要に応じて、サンプル全体をhttp://www.georgbachmann.com/demo/CrashTest.zipからダウンロードできます。
迅速なコンパイラがそこで何をしているのか知りたいです!
::編集::
クラッシュdoSomethingWith:
は拡張機能に依存していることにも注意してください!