iOS4上的NSFetchedResultsController问题

iOS4上的NSFetchedResultsController问题,ios,uitableview,core-data,nsfetchedresultscontroller,nsfetchrequest,Ios,Uitableview,Core Data,Nsfetchedresultscontroller,Nsfetchrequest,我正在开发一个使用CoreData的应用程序。该视图包含一个UITableView(包含大约50个元素),它使用NSFetchedResultsController。还有一个“Pull to refresh”,它允许在WS调用后刷新存储的数据(在另一个具有新托管对象上下文的线程中) 在iOS5上一切正常:当我执行“拉入刷新”时,数据库和tableview被刷新。然而,iOS4存在一个问题。第一个“performFetch”在启动应用程序时起作用(tableview包含所有数据库记录),但在执行“

我正在开发一个使用CoreData的应用程序。该视图包含一个UITableView(包含大约50个元素),它使用NSFetchedResultsController。还有一个“Pull to refresh”,它允许在WS调用后刷新存储的数据(在另一个具有新托管对象上下文的线程中)

在iOS5上一切正常:当我执行“拉入刷新”时,数据库和tableview被刷新。然而,iOS4存在一个问题。第一个“performFetch”在启动应用程序时起作用(tableview包含所有数据库记录),但在执行“拉入刷新”时出现以下错误:

但如果我将“FetchBatchSize”设置为25:

。。。iOS4上不再出现崩溃,我不知道为什么,我想了解这个问题:)我不认为这条线是真正的问题。也许这意味着另一个问题

提前非常感谢您的回答


托马斯你使用不同的上下文有什么原因吗?我不切换我的,我有一个非常类似的声音应用程序

您可以比较的一件事是这个非常方便的CoreDataTableViewController:

我使用它并且没有任何问题(尽管我没有在iOS 4中运行)。您可以比较如何连接fetchedResultsController

还有一点-您是否有捕获所有断点,以便在引发异常时立即推送调试器?如果不是,则添加它(断点,+添加,“添加异常断点”并保留默认值)。这将把您放在引发异常的行上的调试器中,这应该很有用

祝你好运


Damien

你好,Damien,谢谢你的回答!我使用不同的上下文,因为根据苹果的文档(另一个线程=另一个托管对象上下文),它似乎是一个“最佳实践”。我试图添加一个“异常断点”。不幸的是,这个异常是在main.m文件中抛出的,所以要了解这个问题并不容易。main.m中的ThomasException意味着它没有被处理,并且解开了整个堆栈。您的异常断点将在抛出后立即引发-请重试,直到它工作为止,关键是要查看程序在中断时的确切位置。
2012-02-29 11:56:09.119 Nanopost[1996:207] *** Terminating app due to uncaught exception      'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x5c3c760 <x-coredata://E176B0A1-275B-4332-9231-49FD88238C2B/Ads/p231>''
*** Call stack at first throw:
(
0   CoreFoundation                      0x02bfe919 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x02e595de objc_exception_throw + 47
2   CoreData                            0x028b833f _PFFaultHandlerLookupRow + 1407
3   CoreData                            0x028b5ee3 _PF_FulfillDeferredFault + 499
4   CoreData                            0x028b9f3f _sharedIMPL_pvfk_core + 95
5   CoreData                            0x0292a010 _PF_Handler_Public_GetProperty + 160
6   Foundation                          0x02442c4f -[NSSortDescriptor compareObject:toObject:] + 128
7   CoreData                            0x0297db5e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 286
8   CoreData                            0x0297e1b2 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 402
9   CoreData                            0x029841bc -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1804
10  Foundation                          0x02380c1d _nsnote_callback + 145
11  CoreFoundation                      0x02bd6cf9 __CFXNotificationPost_old + 745
12  CoreFoundation                      0x02b5611a _CFXNotificationPostNotification + 186
13  Foundation                          0x023767c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
14  CoreData                            0x028c0519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89
15  CoreData                            0x028f802b -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 1579
16  Foundation                          0x02395e9a __NSThreadPerformPerform + 251
17  CoreFoundation                      0x02bdfd7f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
18  CoreFoundation                      0x02b3e2cb __CFRunLoopDoSources0 + 571
19  CoreFoundation                      0x02b3d7c6 __CFRunLoopRun + 470
20  CoreFoundation                      0x02b3d280 CFRunLoopRunSpecific + 208
21  CoreFoundation                      0x02b3d1a1 CFRunLoopRunInMode + 97
22  GraphicsServices                    0x031e62c8 GSEventRunModal + 217
23  GraphicsServices                    0x031e638d GSEventRun + 115
24  UIKit                               0x0063cb58 UIApplicationMain + 1160
25  Nanopost                            0x0000230a main + 170
26  Nanopost                            0x00002255 start + 53
)
terminate called after throwing an instance of '_NSCoreDataException'
[l_FetchRequest setFetchBatchSize:20];
[l_FetchRequest setFetchBatchSize:25];