iphone - iOS 崩溃 'NSInternalInconsistencyException',原因 : 'statement is still active' Core Data cache related?

标签 iphone ios objective-c core-data nsfetchedresultscontroller

偶尔会在使用 NSFetchedResultsController 的屏幕上的崩溃报告中看到这些弹出消息,但不确定如何解决它们。我不相信我在任何地方都使用线程,除非 NSFetchedResults 在内部使用它们。

'NSInternalInconsistencyException', reason: 'statement is still active' 是我得到的完整解释。

两个最近的堆栈跟踪:

0   CoreFoundation                      0x37a368bf __exceptionPreprocess + 163
1   libobjc.A.dylib                     0x3151c1e5 objc_exception_throw + 33
2   CoreData                            0x340b2ea5 -[NSSQLiteStatement cachedSQLiteStatement] + 1
3   CoreData                            0x340b274f -[NSSQLiteConnection prepareSQLStatement:] + 55
4   CoreData                            0x34156049 -[NSSQLChannel selectRowsWithCachedStatement:] + 61
5   CoreData                            0x34181d63 newFetchedRowsForFetchPlan_MT + 783
6   CoreData                            0x340bab07 -[NSSQLCore newRowsForFetchPlan:] + 351
7   CoreData                            0x34160011 -[NSSQLCore fetchRowForObjectID:] + 1005
8   CoreData                            0x340cca57 -[NSSQLCore newValuesForObjectWithID:withContext:error:] + 195
9   CoreData                            0x340cbf83 _PFFaultHandlerLookupRow + 423
10  CoreData                            0x340cba97 _PF_FulfillDeferredFault + 187
11  CoreData                            0x340cb94f _sharedIMPL_pvfk_core + 39
12  PowerPro                            0x0006a779 -[GuestCard getPrimaryProspectiveTenant] (GuestCard.m:77)
13  PowerPro                            0x00017bf9 -[OutstandingFollowupsViewController configureCell:atIndexPath:] (OutstandingFollowupsViewController.m:208)
14  PowerPro                            0x00017b9b -[OutstandingFollowupsViewController tableView:cellForRowAtIndexPath:] (OutstandingFollowupsViewController.m:203)

Last Exception Backtrace:
0   CoreFoundation                      0x37a368bf __exceptionPreprocess + 163
1   libobjc.A.dylib                     0x3151c1e5 objc_exception_throw + 33
2   CoreData                            0x340b2ea5 -[NSSQLiteStatement cachedSQLiteStatement] + 1
3   CoreData                            0x340b274f -[NSSQLiteConnection prepareSQLStatement:] + 55
4   CoreData                            0x34156049 -[NSSQLChannel selectRowsWithCachedStatement:] + 61
5   CoreData                            0x340c26eb -[NSSQLCore _newRowsForFetchPlan:selectedBy:withArgument:] + 515
6   CoreData                            0x340bab3f -[NSSQLCore newRowsForFetchPlan:] + 407
7   CoreData                            0x3415ea55 -[NSSQLCore newFetchedPKsForSourceID:andRelationship:] + 2217
8   CoreData                            0x3416a935 -[NSSQLCore newValueForRelationship:forObjectWithID:withContext:error:] + 689
9   CoreData                            0x34108f8b -[NSFaultHandler retainedFulfillAggregateFaultForObject:andRelationship:withContext:] + 479
10  CoreData                            0x340dcb23 -[_NSFaultingMutableSet willRead] + 219
11  CoreData                            0x340dc70b -[_NSFaultingMutableSet count] + 23
12  PowerPro                            0x00016eb1 -[BrowseGuestCardsViewController configureCell:atIndexPath:] (BrowseGuestCardsViewController.m:246)
13  PowerPro                            0x00017173 -[BrowseGuestCardsViewController tableView:cellForRowAtIndexPath:] (BrowseGuestCardsViewController.m:222)
14  UIKit                               0x34e4e9cb -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 547
15  UIKit                               0x34e4daa9 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1077
16  UIKit                               0x34e4d233 -[UITableView layoutSubviews] + 207
17  UIKit                               0x34df1d4b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 183
18  CoreFoundation                      0x3799522b -[NSObject performSelector:withObject:] + 43
19  QuartzCore                          0x3318c381 -[CALayer layoutSublayers] + 217
20  QuartzCore                          0x3318bf99 CA::Layer::layout_if_needed(CA::Transaction*) + 217
21  QuartzCore                          0x3318bea5 -[CALayer layoutIfNeeded] + 153
22  UIKit                               0x34eb6fe1 -[UIButton titleLabel] + 73
23  PowerPro                            0x00017983 -[BrowseGuestCardsViewController viewDidLoad] (BrowseGuestCardsViewController.m:75)

最佳答案

这很可能是某种程度上的线程问题。问题中没有足够的信息可以确定,但值得检查崩溃日志并查看异常发生时所有线程的堆栈跟踪,并查看是否有任何其他线程正在做任何交互的事情与托管对象。可能是您有一个通知处理程序、一个 URL 连接完成处理程序,或者您没有注意到的一些其他使用并发的代码,在后台使用核心数据对象。值得注意的是,在多个线程上使用的上下文中设置或访问任何托管对象的任何属性可能会触发此类异常,这会使其很难诊断。 p>

在大多数应用中解决这些问题的相对简单的解决方案是将该代码的执行推送到主线程(使用 dispatch_async())。或者,如果您有很多处理要做,最好在后台线程上创建子上下文并从子上下文中重新获取对象,然后保存子上下文。当然,要重新获取对象,您需要有它的 objectID,这是一个只能在对象最初获取的线程上访问的属性......

关于iphone - iOS 崩溃 'NSInternalInconsistencyException',原因 : 'statement is still active' Core Data cache related?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523867/

相关文章:

ios - UIPageControl 中的 pageIndicatorTintColor 在 iOS7 中保持半透明白色

iphone - 如何使用 facebook ios sdk 发出好友请求?

objective-c - NSMenuitem 模板图像色调颜色不改变

ios - 按下 UITableViewCell 内的按钮时的 scrollToRowAtIndexPath

objective-c - 保留和复制之间的区别?

ios - Xcode 11.2 - 在钥匙串(keychain)中找不到指定的项目

iphone - CALayer委托(delegate)方法drawLayer没有被调用

iphone - 从 NSDate 获取时间返回 nil

iphone - 如何将一个大的tif文件分解为多个UIImage,以显示在UIImageView中?

ios - 如何在 objective-c 中的sqlite数据库中存储和检索NSArray对象