はじめに
iOS のシミュレーター上でどうやらこのようなException が吐き出されたらしい。
となった時
動作確認環境
iOS12シミュレーター
Xcode11.3
これりゃなんだろう??
Failed to set (kerning) user defined inspected property on (UILabel): [<UILabel 0x############> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key kerning.
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index # beyond bounds for empty array'
*** First throw call stack:
(
0 CoreFoundation 0x################ __exceptionPreprocess + $$$
あぁエラーだ〜〜
諦めようとなる前に、一度、検索してみましょう
いくつか検索ワードがありました。
これはなんだろう?
exceptionPreprocess
CoreFoundation で、ExceptionPreprocess が起こってるみたいだな。って考えてみる。
Preprocess の Exception ということなのでしょうね。
ここで一度落ち着く。
って調べてみる。
ざっくり調べてみると、、、
iOS9でアプリが起動直後にクラッシュする場合の回避方法
にも出てるみたいですね。
これは、Exception は一緒だけどもその上のエラーメッセージが違うぞっていうのがわかる。
どうやら、XCode 側の処理でダメなことしてるっぽいって考えておく。
this class is not key value coding-compliant for the key kerning.
swift初心者:「this class is not key value coding-compliant for the key」の対処方法
どうやら
削除を試みた際に用意していたControllerのみ @IBOutlet や @IBAction 接続を削除してしまうと発生するらしいエラーとのことでした。必ずcontrollerのみでなく、Storyboardの Show the Connections inspecter上からも接続を解除するようにしましょう。
とのころだからどうやら表題のエラーとは別のものらしい。
とわかる。
じゃぁ答えはどこにあるんだろう?ということで、
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index # beyond bounds for empty array'
これが、問題のエラーが起きているところだった。
NSRangeException
Range の Exception が吐き出されているらしい。
どうやら「reason:」理由は、・・・に素直に書いている。ということで、NSArrayM のところに「#」の値はempty array らしいというのがどうやらそう読めるっぽい。
可能性があるのは、これは経験則からすると、型がNSArrayで呼び出していて、NSMutableArray 出ない時によく出るっぽいので、この辺りを読み進めていくと
エラー文を読み進める
1 某file.dylib 0x################ objc_exception_throw + ##
2 CoreFoundation 0x################ _CFThrowFormattedException + ###
3 CoreFoundation 0x################ -[__NSArrayM objectAtIndexedSubscript:] + ###
4 プロジェクト名 0x################ $%%%%%%%某ViewController某collection某cellForItemAt某UICollection某Cell某Foundation某IndexPath某 + #####
5 プロジェクト名 0x################ $%%%%%%%某ViewController某collection某cellForItemAt某UICollection某Cell某Foundation某IndexPath某 + ###
6 UIKitCore 0x################ -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + ###
7 UIKitCore 0x################ -[UICollectionView _prefetchItemsForPrefetchingContext:maxItemsToPrefetch:] + ###
8 UIKitCore 0x################ -[UICollectionView layoutSubviews] + ###
9 UIKitCore 0x################ -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + ######
10 QuartzCore 0x################ -[CALayer layoutSublayers] + ###
11 QuartzCore 0x################ 某Layer16layout_if_neededEPNS_11TransactionE + ###
12 QuartzCore 0x################ 某Layer28layout_and_display_if_neededEPNS_11TransactionE + ##
13 QuartzCore 0x################ 某Context18commit_transactionEPNS_11TransactionEd + ###
14 QuartzCore 0x################ 某Transaction6commitEv + ###
15 QuartzCore 0x################ 某Display11DisplayLink14dispatch_itemsEyyy + ###
16 QuartzCore 0x################ 某display_timer_callbackP12__CFMachPortPvlS1_ + ###
17 CoreFoundation 0x################ __CFMachPortPerform + 157
18 CoreFoundation 0x################ __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + ##
19 CoreFoundation 0x################ __CFRunLoopDoSource1 + ###
20 CoreFoundation 0x################ __CFRunLoopRun + ####
21 CoreFoundation 0x################ CFRunLoopRunSpecific + ###
22 Foundation 0x################ -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + ###
23 プロジェクト名 0x################ $某クラス名某メソッド名や型など + ####
24 プロジェクト名 0x################ $某クラス名某メソッド名や型など + ####
25 プロジェクト名 0x################ $某クラス名某table某didSelectRowAty某_Foundation某IndexPath某 + ####
26 プロジェクト名 0x################ $某クラス名某table某didSelectRowAt某UITable某Foundation某IndexPath某 + ###
27 UIKitCore 0x################ -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect:] + ###
28 UIKitCore 0x################ -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + ##
29 UIKitCore 0x################ -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + ###
30 UIKitCore 0x################ _runAfterCACommitDeferredBlocks + ###
31 UIKitCore 0x################ _cleanUpAfterCAFlushAndRunDeferredBlocks + ###
32 UIKitCore 0x################ _afterCACommitHandler + ##
33 CoreFoundation 0x################ __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + ##
34 CoreFoundation 0x################ __CFRunLoopDoObservers + ###
35 CoreFoundation 0x################ __CFRunLoopRun + ####
36 CoreFoundation 0x################ CFRunLoopRunSpecific + ###
37 GraphicsServices 0x################ GSEventRunModal + ##
38 UIKitCore 0x################ UIApplicationMain + ####
39 プロジェクト名 0x################ main + ##
40 libdyld.dylib 0x################ start + #
読み進めていると、プロジェクト名の値メソッド呼び出しているところで値を取り出しているところにnilが入ってるのかなというところがわかりました。
具体的には自分の書き方にエラーがあるとみて自分のプロジェクト名の部分を探す
23 プロジェクト名 0x################ $某クラス名某メソッド名や型など + ####
24 プロジェクト名 0x################ $某クラス名某メソッド名や型など + ####
25 プロジェクト名 0x################ $某クラス名某table某didSelectRowAty某_Foundation某IndexPath某 + ####
26 プロジェクト名 0x################ $某クラス名某table某didSelectRowAt某UITable某Foundation某IndexPath某 + ###
これはまた具体的なことだ!
エラー文からどこの部分でエラーになっているのか読み取る
クラス名とメソッド名と引数までもが実は連なっていることがわかりました!!!
Error メッセージは何気に具体的に教えていたりします。
この部分はどうやら、行番号だったりしますしね?
まとめ
XCode でのエラーが出た際は、このようにして、Error を読み進めると解決しやすいかもですよ。
またエラーが飛び出したらどういうエラーなのかをシェアしていきます。
ではまた!!!
関連記事
【About】(http://qiita.com/sunstripe) - サンストライプ
制作チーム:サンストライプ
(月1WEBコンテンツをリリースして便利な世の中を作っていくぞ!!ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中!!)
地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます!!
https://the.themedia.jp/
ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える
プログラミングワークショップ・ウェブ塾の開講!!!
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
プログラミングサロン 月1だけのプログラミング学習塾
協力応援 / 支援者の集い
チーム:サンストライプ
プログラミングラボ
一緒にポートフォリオを作りませんか?現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週1のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております!!
興味がある方は、DMに話しかけてみてください。
トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼、人と考えてます。
「コンサルティング」と「クリエイティブ」の両角度から「人材戦略パートナー」としてトータル的にサポートします!!
キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/
#スポンサー募集
ネリム
https://nerim.co.jp/
配信事業などを映像コンテンツなどの制作しております