私はクラッシュの背後にある理由を理解しようとしています。** - [__ NSSingleObjectArrayI objectAtIndex:]:インデックス18446744073709551615境界を越えて[0 .. 0]
__NSSingleObjectArrayI
とは何ですか?私はこれに関する情報を見つけることができませんでした。
crashlyticsによって送らcrashlogは:クラッシュの
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//NSArray //NSArray both are strong,nonatomic
self.selectedLocation = self.filteredLocations[indexPath.row];
[self.tableView reloadData];
[self.searchField resignFirstResponder];
}
//データソース方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.filteredLocations.count;
}
74%である:クラッシュは、以下の方法で起こっている
Fatal Exception: NSRangeException
0 CoreFoundation 0x1836fa1c0 __exceptionPreprocess
1 libobjc.A.dylib 0x18213455c objc_exception_throw
2 CoreFoundation 0x1836eb428 +[__NSSingleObjectArrayI automaticallyNotifiesObserversForKey:]
3 boostApp 0x100070098 -[LocationPromptVc tableView:didSelectRowAtIndexPath:] (LocationPromptVc.m:269)
4 UIKit 0x189683078 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]
5 UIKit 0x189733b34 -[UITableView _userSelectRowAtPendingSelectionIndexPath:]
6 UIKit 0x1897e6d5c _runAfterCACommitDeferredBlocks
7 UIKit 0x1897d8b10 _cleanUpAfterCAFlushAndRunDeferredBlocks
8 UIKit 0x189547854 _afterCACommitHandler
9 CoreFoundation 0x1836a77dc __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
10 CoreFoundation 0x1836a540c __CFRunLoopDoObservers
11 CoreFoundation 0x1836a589c __CFRunLoopRun
12 CoreFoundation 0x1835d4048 CFRunLoopRunSpecific
13 GraphicsServices 0x18505a198 GSEventRunModal
14 UIKit 0x1895c02fc -[UIApplication _run]
15 UIKit 0x1895bb034 UIApplicationMain
16 boostApp 0x1000bbc24 main (main.m:14)
17 libdispatch.dylib 0x1825b85b8 (Missing)
iOS10で起こっている。私は過去90日間に31回のクラッシュを経験しました。
didSelectRowメソッドが間違ったインデックス18446744073709551615を指しているのはなぜですか?
このクラッシュは非常にまれで、再現できません。これをデバッグするためのアイデアはありますか?
テーブルビューは単純です.ITにはナビゲーションバーに検索フィールドがあり、検索フィールドテキストに基づいて、場所をフィルタリングしてテーブルビューを作成します。ユーザーが任意の行を選択すると、別のVCに位置データを表示します。
クラッシュしていない場合、またはテーブル行を持っているよりも、self.filteredLocationsは、複数のオブジェクトを持っているかもしれないということも可能です?またはその逆の場合 – Stephen
self.filteredLocations.count> indexPath.rowをチェックし、コードをこの条件の中に入れます。配列から無効なインデックスを取得しようとしているようです。 – iProgrammer
はい、データソースと同じ配列を使用しています。 –