Xcode(Swift/Objective-C)における、技術メモです。
自身の脳内整理・備忘録を兼ねてメモしています。
謎の現象?でドハマりしたので、忘れないようにメモしておきます。
原因や再現性も不明であるため、あまり参考にはならないかもしれませんが・・・
※もし何かございましたら、下部「コメント」欄にいただけるとありがたいです。
現象
動作環境
Xcode 11.3.1
使用言語はObjective-C
iPad mini (11.3.1) 実機で稼働確認
現象
ある程度コーディングされているソースに対して、「ふつうに UIButton のOutlet接続」を追加し、アプリを起動すると「nil」で必ず落ちるようになりました。
該当のUIButtonは、もともとタップした時のアクションを実装しており、
デバッグで見る限り、どうもnilで落ちている箇所がこの「タップした時のアクションの処理でnilを受けてしまい落ちた」と見えます。
また、同種類の処理(UIButton)は6つあり、そのうち3つはうまく動作、(コメントアウトしながら確認したところ)あと3つは同じ落ち方をしました。
不可思議なのが、以下の点です。
- 「タップした時に呼ばれる関数」であるにも関わらず、呼ばれてnilで落ちる
(=nilの状態で呼ばれるわけがない箇所なのに、処理が走っている)
- 同種類の処理で、うまくいくパターンといかないパターンがある
XcodeやiPad miniを再起動しても状況は変わらずでした。(100%落ちる)
解決策
解決策と言っていいのかもよく分かりませんが、、、
うまく処理ができなかった3つのパターンについて、InterfaceBuilderとの接続(IBOutlet、IBActionの両方)を、変数名を変更して作り直しました。
(中身の処理は変更なし)
それだけでうまく動作するようになりました。
Xcodeのバグでしょうか・・・?
※これだけでほぼ半日費やしました、、、( ; _ ; )
レアすぎて?再現するか不明、ググる検索キーワードも難しい、、、といった現象ですが、もし何かのお役に立てればと・・・
最後までお読みいただき、ありがとうございました。
以下も、ぜひご活用ください^^