Приложение падает с NSRangeException _PFBatchFaultingArray, используя NSFetchedResultsController - PullRequest
6 голосов
/ 21 сентября 2011

Я получаю много отчетов об ошибках одного определенного сбоя, но понятия не имею, с чего начать, чтобы исправить это, так как я не могу воспроизвести его самостоятельно, и отчеты об ошибках отправляются анонимно.

Как вы увидите, это как-то связано с NSFetchedResultsController, который я использую.

Вот выдержка из этого отчета о сбое. Единственная разница между отчетами - диапазон индексов [...]index (someLargeIndex) beyond bounds (1)[...]. Остальное остается неизменным в каждом отчете.

Application Specific Information:
*** Terminating app due to uncaught exception \\\'NSRangeException\\\', reason: \\\'*** -[_PFBatchFaultingArray objectAtIndex:]: index (262144) beyond bounds (1)\\\'

Thread 0 Crashed:
0   libsystem_kernel.dylib              0x31d1e00c __kill + 8
1   libsystem_c.dylib                   0x32ac4f95 raise + 17
2   AppName                             0x0003d961 uncaught_exception_handler (PLCrashReporter.m:137)
3   CoreFoundation                      0x349b57d3 __handleUncaughtException + 239
4   libobjc.A.dylib                     0x33f9506b _objc_terminate + 103
5   libstdc++.6.dylib                   0x3338ae3d __cxxabiv1::__terminate(void (*)()) + 53
6   libstdc++.6.dylib                   0x3338ae91 std::terminate() + 17
7   libstdc++.6.dylib                   0x3338af61 __cxa_throw + 85
8   libobjc.A.dylib                     0x33f93c8b objc_exception_throw + 71
9   CoreFoundation                      0x349b5491 +[NSException raise:format:arguments:] + 69
10  CoreFoundation                      0x349b54cb +[NSException raise:format:] + 35
11  CoreData                            0x34820fc5 -[_PFBatchFaultingArray objectAtIndex:] + 133
12  CoreData                            0x3485e5fb -[_PFMutableProxyArray objectAtIndex:] + 55
13  CoreData                            0x348e00f7 +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 99
14  CoreData                            0x348e0605 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 353
15  CoreData                            0x348e0ecf -[NSFetchedResultsController(PrivateMethods) _postprocessUpdatedObjects:] + 507
16  CoreData                            0x348e29c7 -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1239
17  Foundation                          0x35f46183 _nsnote_callback + 143
18  CoreFoundation                      0x3498420f __CFXNotificationPost_old + 403
19  CoreFoundation                      0x3491eeeb _CFXNotificationPostNotification + 119
20  Foundation                          0x35f435d3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 71
21  CoreData                            0x34884c07 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 55
22  CoreData                            0x34884fcd -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 141
23  CoreData                            0x34845251 -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList] + 77
24  CoreData                            0x34844f7f -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1815
25  CoreData                            0x348863a5 -[NSManagedObjectContext processPendingChanges] + 17
26  CoreData                            0x3482027f _performRunLoopAction + 127
27  CoreFoundation                      0x3498ca35 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 17
28  CoreFoundation                      0x3498e465 __CFRunLoopDoObservers + 413
29  CoreFoundation                      0x3498f75b __CFRunLoopRun + 855
30  CoreFoundation                      0x3491fec3 CFRunLoopRunSpecific + 231
31  CoreFoundation                      0x3491fdcb CFRunLoopRunInMode + 59
32  GraphicsServices                    0x3354641f GSEventRunModal + 115
33  GraphicsServices                    0x335464cb GSEventRun + 63
34  UIKit                               0x3357dd69 -[UIApplication _run] + 405
35  UIKit                               0x3357b807 UIApplicationMain + 671
36  AppName                             0x00002b69 main (main.m:15)

Извините, я не могу предоставить больше информации. Любые предложения, как начать?

Ответы [ 2 ]

3 голосов
/ 03 января 2014

Вероятно, это проблема кеширования с NSFetchedResultsController. Посмотрите на этот вопрос немного больше: _PFBatchFaultingArray objectAtIndex:

1 голос
/ 20 января 2012

попробуйте заглянуть в свой cellForRowAtIndexPath: или где бы вы ни использовали результаты из NSFetchedResultsController.Там используйте следующий код, чтобы увидеть, сколько результатов вам доступно:

NSArray *sections = fetchController.sections;
int someSection = 0;
id <NSFetchedResultsSectionInfo> sectionInfo = [sections objectAtIndex:someSection];
numberOfObjects = [sectionInfo numberOfObjects];

, а затем перейдите к месту, где вы пытаетесь получить информацию, возможно, по тому, где вы звоните:

[fetchedResultsController objectAtIndexPath:indexPath];

и посмотрите, что вы передаете:

NSLog(@"row to be retrieved: %d", indexPath.row);
[fetchedResultsController objectAtIndexPath:indexPath]; //here comes the crash

В конце концов, вы можете проверить

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

, чтобы увидеть, сколько строк возвращается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...