应用程序使用NSFetchedResultsController与NSRangeException _PFBatchFaultingArray崩溃

时间:2011-09-21 13:52:22

标签: objective-c ios cocoa-touch core-data

我收到很多关于指定崩溃的崩溃报告但不知道从哪里开始修复它,因为我无法自己重现它并且崩溃报告是匿名发送的。

您将看到它与我正在使用的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 个答案:

答案 0 :(得分:3)

这可能是NSFetchedResultsController的缓存问题。再看一下这个问题:_PFBatchFaultingArray objectAtIndex:

答案 1 :(得分:1)

尝试查看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

查看返回的行数。