2016-11-17 11 views
1

私はクラッシュの背後にある理由を理解しようとしています。** - [__ 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に位置データを表示します。

+0

クラッシュしていない場合、またはテーブル行を持っているよりも、self.filteredLocationsは、複数のオブジェクトを持っているかもしれないということも可能です?またはその逆の場合 – Stephen

+0

self.filteredLocations.count> indexPath.rowをチェックし、コードをこの条件の中に入れます。配列から無効なインデックスを取得しようとしているようです。 – iProgrammer

+0

はい、データソースと同じ配列を使用しています。 –

答えて

2

このコードを試してください。このコードが役立つかもしれません。私のアプリケーションでは、collectionViewとその非常にまれなクラッシュについても同じクラッシュが発生しています。純粋にindexOutOfBoundsの問題です。私はどのように私のcollectionViewデータソース数よりも多くの項目を表示するか分からない。しかし、条件付きのチェックが私を助け、今私のアプリは、テーブルのデータとしてテーブルの利用self.filteredLocationsを

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    //NSArray    //NSArray both are strong,nonatomic 
    if (self.filteredLocations.count > indexPath.row && indexPath.row >= 0) { 
     self.selectedLocation = self.filteredLocations[indexPath.row]; 
     [self.tableView reloadData]; 
     [self.searchField resignFirstResponder]; 
    } 
} 
関連する問題