मैं अपने आवेदन में ग्रांड सेंट्रल डिस्पैच (GCD) का उपयोग कर रहा कुछ बड़े कार्य करने करने के लिए के साथ। एप्लिकेशन डाटा स्टोरेज उद्देश्यों के लिए कोर-डेटा का उपयोग कर रहा है। यहाँ (प्रासंगिक सवाल के साथ) मेरी परिदृश्य है:ग्रांड सेंट्रल डिस्पैच (GCD) CoreData
dispatch_queue_t main_queue = dispatch_get_main_queue();
dispatch_queue_t request_queue = dispatch_queue_create("com.app.request", NULL);
dispatch_async(request_queue, ^{
MyNSManagedObject *mObject = [self.fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
// …
// <heavy lifting>
// …
// …
// <update mObject>
// …
[self saveManagedObjectContext];
});
[self saveManagedObjectContext]
का एक परिणाम के रूप में, fetchResultsController
प्रतिनिधि तरीकों स्वचालित रूप से कहा जाता है। नतीजतन, यूआई अद्यतन तर्क kicks।
अब मेरे सवाल है, मैं -saveManagedObjectContext
के लिए main_queue
उपयोग करने की आवश्यकता है है? मैं main_queue
में मेरी NSManagedObject
पर सभी गतिविधियों को अंजाम देना चाहिए? NSManagedObject
को अपडेट करने वाले कुछ ऑपरेशन में 2-3 सेकंड लग सकते हैं। कृपया सलाह दें। धागा प्रति एक प्रबंधित ऑब्जेक्ट संदर्भ -
तो, आपकी बात यह है कि मेरे मामले में, fetchedResultsController का उपयोग करने के बजाय, मुझे एक नया प्रबंधित ऑब्जेक्ट संदर्भ बनाना चाहिए (बैकग्रो undManagedObjectContext), आवश्यक प्रबंधित ऑब्जेक्ट प्राप्त करें, आवश्यक संचालन करें, प्रबंधित ऑब्जेक्ट को अपडेट करें, इस प्रबंधित ऑब्जेक्ट संदर्भ को सहेजें (backgroundManagedObjectContext), और उसके बाद मुख्य प्रबंधित ऑब्जेक्ट संदर्भ में प्रतिबिंबित करने के लिए परिवर्तन मर्ज करें? इससे मेरा जीवन बहुत खराब हो जाएगा। – Mustafa
आप अभी भी अपने यूआई में सामान प्रदर्शित करने और अपडेट करने के लिए प्राप्त परिणाम नियंत्रक का उपयोग कर सकते हैं। मैंने जो कोड दिखाया है वह सब कुछ है जो आपको एक अलग संदर्भ में जो भी संचालन करने की आवश्यकता है, उसे और कुछ भी नहीं बदला जाना चाहिए। –
इस सुनहरे नियम के आसपास के तरीके हैं: https://github.com/adam-roth/coredata-threadsafe। – aroth