[iPhone] SIGABRT エラー で悩む (Objective-C)

Xcode5 では Storyboard がそこそこ使えるようになりました。
 
ただこれに関連するエラーが「Build Succeeded」となった後で
実行時に出て止まってしまいます
SIGABRT エラーや
this class is not key value coding-compliant for the key
などです。

sponsored link

SIGABRT

 
SIGABRT は Signal Abort という意味なので
期待する信号が来ないということです。
ストーリーボードとコード間でのデータのやり取りがうまくできていない
というのが原因のことが多いです。
 
SIGABRT_1b
 
このエラーの特徴は、ビルドエラーにならず実行中におきます。
逆にここに解析の糸口があり、何かの Action があってこのエラーが起きる
なのでこの Action となるところから探っていけます。

  1. 不要なボタンやラベルを画面に置いたままにしていないか
  2. 前に作って消したUIパーツからデータを取り込む変数がないか
  3. 処理の順番が前後してデータができる前に取り込もうとした
  4. etc….

 

エラーを作ってみる

 
簡単にエラーを再現させて見ようと思います。
 
手順は簡単です

  1. New Project を Single View Application で作成
  2. storyboard にある ViewController に Label を配置
  3. ViewController.h と ViewController.m にラベルに文字を表示するコードを記述
  4. Storyboard 上の Label の Referencing outlets の New referencing outlet と testLabel を接続
  5. Build して実行、ラベルの文字が変わるのを確認
  6. ViewController.h と ViewController.m をコメントアウトする
  7. 再度 Build して実行する。Build は成功
  8. SIGABRT エラーとなる

こういうのが表示されて
 
sigabrt_a
 
こんなエラーログが出ました

 
解決策は
storyboard に残っている Label の接続を外すことです。
 
sigabrt_1
 
storyboard で Label の属性を見ると、まだ接続が残っています
黄色い◯の部分を押すと、接続が切れます。
 
これで SIGABRT エラーは解決
 
 

エラーを作ってみる(その2)

もう少し現実的なケースで
 
Interface Builder にラベルとボタンを置き、「0」と「加算」にします。
 
スクリーンショット 2014-01-29 23.07.43
 
ViewController.h に以下のようにラベルとボタンのアクションを宣言します。
 
xcode_calc_2
 
ViewController.m にはボタンがおされたらインクリメントしてラベルに表示する簡単な加算するメソッド disp を記述
 xcode_calc_4
 
ここで、メソッドの名前がいまいちだと誰彼言われて(ありがち…)
disp から addCoutn に変えるとします。
 
スクリーンショット 2014-01-30 0.15.25
 
ボタンも addCount につなぎます
 
スクリーンショット 2014-01-30 0.17.09
 
この状態で、メソッドを書き換えるのを忘れても、ビルドができてしまいます。Warning が出ますが、無視していると
 
SIGABRT_1
 
SIGBART エラーとなります。
 
更に、
 
誰かがエラーを直そうとして、メソッドの disp に合わせて
ViewController.h に disp メソッドの宣言をして
addCount の宣言を消してしまい、ボタンが間違っていると、安易に
もう一つ追加してdisp につなぐと、今回は warning もでません。
ビルドできます。
 
ただ無効なボタンが addCount というあり得ない接続のまま残っていて
それをたたくと SIGBART になります。2つのボタンが微妙に重なっていて
何かの拍子に押されるようなことでしょうか。
 
ボタンなどのUI オブジェクトを色々いじって作り直してやっていると
こんなことになりそうかもしれません。
 
それから、「Clean」をかけてやらないと
消したつもりでも残っていることが何回かありましたね
 

ページのトップへ戻る
 
sponsored link

シェアする

  • このエントリーをはてなブックマークに追加

フォローする