決定論的に再現できないランダムなエラーが発生するため、デバッグが面倒です。例外は
NSInternalInconsistencyException { 行: 0x1e5eb080.posErrorMarker == 1 + 1*0x1e5eb080.negError + 1*0x1fa51a40.marker 0x1f933020.negError == 274 + 1*0x1f933020.posErrorMarker + -1*0x1fb84100.marker d 8 = ne.7 エラー 0x1
>
0CoreFoundation 0x32c1b3e7 + 162
1libobjc.A.dylib 0x3a916963 objc_exception_throw + 30
2CoreFoundation 0x32c1b307 + 106
3Foundation 0x335ce24f + 190
4Foundation 0x335d0871 + 60
5Foundation 0x335d19e9 + 624
6Foundation 0x335d9eab + 230
7UIKit 0x34e6211b + 162
8UIKit 0x34e67b9f + 26
9CoreFoundation 0x32b61acd CFArrayApplyFunction + 176
10UIKit 0x34e67bdf + 90
11CoreFoundation 0x32b61acd CFArrayApplyFunction + 176
12UIKit 0x34e67bdf + 90
13CoreFoundation 0x32b61acd CFArrayApplyFunction + 176
14UIKit 0x34e67bdf + 90
15CoreFoundation 0x32b61acd CFArrayApplyFunction + 176
16UIKit 0x34e67bdf + 90
17UIKit 0x34e67c6f + 26
18UIKit 0x34a2d769 + 732
19UIKit 0x34a78091 + 72
20UIKit 0x34e3b80d + 132
21UIKit 0x34e48e17 + 1830
22UIKit 0x34e46f37 + 7530
23MyApp 0x00093dd1 __32-[MyController requestStuff:]_block_invoke (MyController.m:123) + 298449
MyController.m:123 は実際には、MyController.m で定義した requestLocalStuff という名前の別のメソッドへの呼び出しです。
[self requestLocalStuff];
requestLocalStuff 内の特定の行で例外をスローしていないように見えるため、これは奇妙です。
これがどのように呼び出されているかについてのいくつかのコンテキスト:
- これは、ネットワーク呼び出しからの戻りです。私は AFNetworking を使用しています。
- ネットワーク呼び出しを行うメソッドは、パラメーターとしてブロックを取り、ネットワーク呼び出しが正常に戻った後にそのブロックを呼び出します。したがって、スタック トレースの _block_invoke です。
- requestLocalStuff は CoreData を呼び出し、最終的には insertItemsAtIndexPaths を使用してコントローラーの UICollectionView を更新します。しかし、スタック トレースが示すように、エラーは requestLocalStuff 内からスローされたようには見えません。
- UICollectionView 内のバグにより、UICollectionViewFlowLayout をサブクラス化して、アプリをクラッシュさせる例外をキャッチする必要がありました。それが関与できるかどうかはわかりません。
私の UICollectionViewFlowLayout サブクラス:
-(void)prepareForCollectionViewUpdates:(NSArray *)updateItems{
@try {
[super prepareForCollectionViewUpdates:updateItems];
}
@catch (NSException *exception) {
DDLogError(@"Error in the layout: %@", exception);
}
@finally {
}
}
Googleで posErrorMarker の説明を検索しましたが、役に立ちませんでした。ここで何が起こっているのか手がかりを持っている人はいますか?