मैं एक आईपैड ऐप लिख रहा हूं जो लेख दिखाता है और कतार पर एक अलग NSOperation में नए लेख डाउनलोड करता है और उन्हें मूल डेटा में डाल देता है। वर्तमान में मेरे पास ऑपरेशन के लिए एक अलग संदर्भ है, जो ऑपरेशन की मुख्य विधि में बनाया गया है और मुख्य संदर्भ के समान समन्वयक का उपयोग कर रहा है। मैं उसी पैटर्न का उपयोग करता हूं जिसे NSManagedObjectContextDidSaveNotification के लिए उस ऑपरेशन में बहुत कुछ सुनने का सुझाव दिया गया है और फिर मुख्य थ्रेड संदर्भ पर मर्ज चेंजफ्रॉम कॉन्टेक्स्टडिडसेव नोटिफिकेशन को कॉल करना है। समस्या मैं इस त्रुटि मिल रही है:कोर डेटा पृष्ठभूमि थ्रेड NSManagedObjectContext विलय त्रुटि
2011-01-27 07:26:02.574 Zagazine[12298:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Object's persistent store is not reachable from this NSManagedObjectContext's coordinator'
*** Call stack at first throw:
(
0 CoreFoundation 0x3284b987 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x31aca49d objc_exception_throw + 24
2 CoreData 0x3549d07b _PFRetainedObjectIDCore + 638
3 CoreData 0x3549cdfb - [NSManagedObjectContext(_NSInternalAdditions) _retainedObjectWithID:] + 14
4 CoreData 0x354bf85b -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 2170
5 CoreFoundation 0x327e9bbf -[NSObject(NSObject) performSelector:withObject:] + 22
6 Foundation 0x320fd795 __NSThreadPerformPerform + 268
7 CoreFoundation 0x328017dd __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
8 CoreFoundation 0x327d34fb __CFRunLoopDoSources0 + 194
9 CoreFoundation 0x327d2e5b __CFRunLoopRun + 230
10 CoreFoundation 0x327d2c87 CFRunLoopRunSpecific + 230
11 CoreFoundation 0x327d2b8f CFRunLoopRunInMode + 58
12 GraphicsServices 0x3094a4ab GSEventRunModal + 114
13 GraphicsServices 0x3094a557 GSEventRun + 62
14 UIKit 0x32c14329 -[UIApplication _run] + 412
15 UIKit 0x32c11e93 UIApplicationMain + 670
16 ArticleApp 0x0000233f main + 70
17 ArticleApp 0x000022f4 start + 40
)
terminate called after throwing an instance of 'NSException'
Program received signal: “SIGABRT”.
यह दिलचस्प बात यह है कि इस त्रुटि को केवल पहली बार मैं इसे स्थापित करने के बाद एप्लिकेशन लॉन्च होता है। इसके बाद के सभी लॉन्च किए गए काम ठीक होने के बाद। क्या कोई जानता है कि यह त्रुटि क्यों हो रही है और यह केवल प्रारंभिक स्थापना पर क्यों होगी।
इसके अलावा, इस तरह मैं संदर्भ विलय कर रहा हूँ, इस पृष्ठभूमि के धागे पर कहा जाता है, जब यह सूचना प्राप्त है:
- (void)mergeChanges:(NSNotification *)notification {
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *mainContext = [appDelegate managedObjectContext];
// Merge changes into the main context on the main thread
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
}
हाँ जो काम करता है, मैंने ऐप लॉन्च पर सभी ऑब्जेक्ट्स को हटाने के लिए कोड जोड़ा है इससे पहले कि कोई अन्य पृष्ठभूमि सामान खुश हो और यह चाल हो। क्या यह सामान्य है? क्या मेरे डिजाइन में कुछ गड़बड़ है? मैंने वर्तमान में एप्लिकेशन में सिंक ऑपरेशन कतार शुरू की है: didFinishLaunchingWithOptions जो डेटा और आवेषण डाउनलोड करता है। – marchinram
सहेजते समय आपको ऑब्जेक्ट्स को हटाना नहीं है। जब मैंने कहा कि कोर डेटा संदर्भ खाली होने पर आपको एक बार सहेजना चाहिए, तो मेरा मतलब यह था कि आपको किसी भी डिवाइस पर स्थापित होने के बाद पहली बार लॉन्च होने पर, शुरुआत में ही बचाया जाना चाहिए। आपका डिजाइन मेरे लिए बिल्कुल ठीक है। यह सिर्फ पृष्ठभूमि धागे से कोर डेटा तक पहुंच है ... मुश्किल है! – Yuji
मैं विशुद्ध रूप से परीक्षण के लिए वस्तुओं को हटा दें, मैं एक वेब सेवा से json डाउनलोड करने और अपने स्टोर में डालें, तो मैं इसे बाहर का परीक्षण करने के json डेटा बदलना चाहते। भ्रम के लिए खेद है और आपके उत्तर के लिए धन्यवाद। एक अच्छा 'अनुमान' के लिए +1 – marchinram