Application error using NSRangeException _PFBatchFaultingArray using NSFetchedResultsController

I get a lot of crash reports regarding one of them, but I have no idea where to start fixing it, because I cannot reproduce it myself, and crash reports were sent anonymously.

As you will see, this has something to do with the NSFetchedResultsController that I use.

Here is an excerpt from this crash report. The only difference between the reports is the range of indices [...]index (someLargeIndex) beyond bounds (1)[...] . The rest remain the same in every report.

 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) 

Sorry that I cannot provide more information. Any suggestions how to start?

+6
source share
2 answers

This is probably a caching issue with NSFetchedResultsController. See this question a little more: _PFBatchFaultingArray objectAtIndex:

+3
source

try finding cellForRowAtIndexPath in you: or wherever you use NSFetchedResultsController results. There, use the following code to find out how many results are available to you:

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

and then go to the place where you are trying to get information, probably where you are calling:

 [fetchedResultsController objectAtIndexPath:indexPath]; 

and see what you pass:

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

In the end, you can check

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

to find out how many rows are being returned.

+1
source

Source: https://habr.com/ru/post/897752/


All Articles