2012-03-01 10 views
16

NSFetchedResultsController का उपयोग कर स्क्रीन पर क्रैश रिपोर्ट में इन पॉप अप को कभी-कभी देखकर, और यह सुनिश्चित न करें कि उन्हें कैसे संबोधित किया जाए। मुझे विश्वास नहीं है कि मैं कहीं भी थ्रेडिंग का उपयोग कर रहा हूं, जब तक कि NSFetchedResults आंतरिक रूप से उनका उपयोग नहीं कर रहा हो।आईओएस दुर्घटना 'एनएसआईएनएनल इन्कॉन्सिस्टेंसी अपवाद', कारण: 'स्टेटमेंट अभी भी सक्रिय है' कोर डेटा कैश से संबंधित है?

'एनएसआईएननल इन्फॉन्सिस्टेंसी अपवाद', कारण: 'कथन अभी भी सक्रिय है' मुझे पूरा स्पष्टीकरण है।

दो हाल ही में स्टैक ट्रेस: ​​

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) 
+1

शायद यह सत्यापित करने का प्रयास करें कि आप केवल अपने मुख्य थ्रेड से कोर डेटा तक पहुंच रहे हैं, 'जोर दें ([एनएसटीएचएड वर्तमान थ्रेड] == [एनएसटीएचड मुख्य थ्रेड] =' जहां आप कोरडाटा कॉल करते हैं। – nielsbot

+0

सीएफ। http://stackoverflow.com/questions/3078177/core-data-fetch-request-fails-with-nsinternalinconsistencyexception-reason – nielsbot

+0

हाँ मैंने यह प्रश्न देखा। ऐसा लगता है कि वे मेरे एमओसी का उपयोग नहीं कर रहे थे, क्योंकि मुझे विश्वास नहीं है कि मैं कर रहा हूं। –

उत्तर

15

यह संभावना से भी अधिक है कि इस किसी तरह से या किसी अन्य में एक सूत्रण समस्या है। निश्चित रूप से देखने के लिए प्रश्न में पर्याप्त जानकारी नहीं है, लेकिन अपवाद के समय क्रैश लॉग के माध्यम से जांच के लायक है और सभी धागे के लिए स्टैक निशान देख रहे हैं, और देखें कि क्या कोई अन्य थ्रेड कुछ भी कर रहा है जो इंटरैक्ट करता है एक प्रबंधित वस्तु के साथ। यह हो सकता है कि पृष्ठभूमि में कोर डेटा ऑब्जेक्ट्स का उपयोग करके आपके पास एक अधिसूचना हैंडलर, एक यूआरएल कनेक्शन पूर्णता हैंडलर, या समेकन का उपयोग करके कुछ अन्य कोड कोड हो। यह ध्यान देने योग्य है कि को सेट करना या किसी भी प्रबंधित ऑब्जेक्ट पर किसी भी प्रॉपर्टी पर किसी भी प्रॉपर्टी से किसी भी प्रॉपर्टी पर किसी भी प्रॉपर्टी पर किसी भी प्रॉपर्टी को एक्सेस करना संभवतः इस तरह के अपवाद को ट्रिगर कर सकता है, जो इसे निदान करने में काफी कठिन बना सकता है।

अधिकांश ऐप्स में इन समस्याओं को हल करने के लिए अपेक्षाकृत सरल समाधान उस कोड को मुख्य थ्रेड पर निष्पादित करना है (dispatch_async() का उपयोग करके)। वैकल्पिक रूप से, यदि आपके पास बहुत सारी प्रसंस्करण हो रही है तो पृष्ठभूमि थ्रेड पर बाल संदर्भ बनाने और बच्चे के संदर्भ से ऑब्जेक्ट को फिर से लाने के लिए बेहतर हो सकता है, फिर बच्चे के संदर्भ को सहेजें। बेशक, वस्तु आप अपने objectID है, जो एक संपत्ति है जो केवल धागा वस्तु मूल रूप से किया गया था पर दिलवाया पर पहुँचा जा सकता है है की आवश्यकता है ... फिर से लाने के लिए

+0

मैं आम तौर पर ऐसा होता हूं जब मैंने अपने बच्चों में से किसी एक की निजी कतार पर निष्पादन के दौरान एक मुख्य UI संदर्भ को सहेजने का प्रयास किया ... – MiKL

+1

+1 "और देखें कि कोई अन्य थ्रेड कुछ प्रबंधित कर रहा है जो प्रबंधित के साथ इंटरैक्ट करता है वस्तु " –

+0

क्या यह सच है? "बेशक, उस ऑब्जेक्ट को फिर से लाने के लिए जिसकी आपको ऑब्जेक्ट आईडी होना चाहिए, जो एक ऐसी संपत्ति है जिसे केवल थ्रेड पर एक्सेस किया जा सकता है जिस पर ऑब्जेक्ट मूल रूप से प्राप्त किया गया था ..." –

6

समझे इस त्रुटि जबकि एक साथ NSFetchedResultController साथ डेटा का अनुरोध (से मुख्य धागा संदर्भ) और मेरे पृष्ठभूमि संदर्भ के माध्यम से NSFetchRequest।

जिस तरह से मैंने इसे संभाला है, वह है कि मेरे प्रत्येक एमओसी के पास अपना स्वयं का स्टोर समन्वयक होता है। लगातार स्टोर समन्वयक दोनों डिस्क पर एक ही लगातार स्टोर से बात करते हैं।

संबंधित मुद्दे