KATUBLO | エンジニアの日常BLOG

プログラミング、数学、旅行などを中心に役立つ情報をお届け

2019年02月11日

【swift】UITableViewCellにてsignal SIGABRTがでた時のエラー解決方法

ゴール

XcodeでUITableViewCellをコードで設定した後、sumiraterで動かした時に生じた「signal SIGABRT」のエラーを解決する。

 

 

signal SIGABRTとは?

 

signal: 「信号」

sigabart:「信号の1つで、プログラムの異常終了を表わす。」

 

一言でいうと「エラーが発生している」ということ。原因は多岐に渡る。

 

よくあるパターンとしては「StoryBoardでOutlet接続したが、そのOutletが上手くリンクしていない」「配列で存在しない添字にアクセスしている」「オブジェクトがnilになっている」「コード修正前のキャッシュが残っている」などが考えられるそうだ。

 

 

今回のエラーの原因は?

では今回の「signal SIGABRT」がなぜ生じたのかという原因を考える。まず見るべき場所としてはconsoleLogである。Logを見るとエラーの原因っぽい内容が二箇所出力されていた。

 

ConsoleLogのエラー出力

「libc++abi.dylib: terminating with uncaught exception of type NSException」

+

「Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘unable to dequeue a cell with identifier songCell – must register a nib or a class for the identifier or connect a prototype cell in a storyboard’」

 

NSExceptionとは?

Appleの公式サイトによるとNSExceptionは以下のように説明されている。

 

「An object that represents a special condition that interrupts the normal flow of program execution.」

 

日本語訳をすると

 

「プログラム実行の通常のフローを中断する特別な条件を表すオブジェクト」

とのこと。NSExceptionは一応オブジェクトなのね。意味的には処理を止めるエラーと考えてよさそう。

 

NSInternalInconsistencyExceptionとは?

先ほど同様、Appleの公式サイトによるとNSExceptionは以下のように説明されている。

 

「Name of an exception that occurs when an internal assertion fails and implies an unexpected condition within the called code.」

 

日本語訳をすると

 

「内部 assertion が失敗したときに発生し、呼び出されたコード内で予期しない状態を意味する例外の名前。」

 

assertionとは?

「プログラミング言語などの仕様・機能の一つで、プログラムの前提として満たされるべき条件を記述し、実行時にそれが満たされていない場合にエラーや例外を発生させたり、メッセージを表示して処理を中断したりする機能をアサーションチェックあるいは略してアサーションという。」とのこと。

 

NSInternalInconsistencyExceptionが発生した理由

「NSException」のエラー原因はConsoleには出力されていなかったが「NSInternalInconsistencyException」の原因らしき文章ががConsoleに書かれていた為まずこちらから解決することにした。エラー原因は以下の文章の内容だと考えられる。

 

「unable to dequeue a cell with identifier songCell – must register a nib or a class for the identifier or connect a prototype cell in a storyboard」

 

どうやらCellのclassを登録する処理を書き忘れているらしい。

 

以下のコードを追加し解決

 

のコードを「override func viewDidLoad() 」内に記述することで無事エラーが消えた。同時にNSExceptionのエラーも消えたため、NSExceptionの中にNSInternalInconsistencyExceptionが含まれており、今回のエラーはNSInternalInconsistencyExceptionのエラー原因を解決したことで、すべてのエラーを解消できたと考えられる。

     

 

参考サイト

最後まで読んで頂き、ありがとうございました。
SNS等でのシェアが頂ければ幸いです!

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習を開始。現在は「ToC向け大規模サービスを運営するメガベンチャー」と「AIスタートアップ」でインターンで修行中。2020年4月からwebエンジニアとして社会人生活スタート。

広告

特集記事