2015-03-22 5 views
5

दोनों पर एसिंक ब्लॉक क्रैश पर -com.apple.CoreData.ConcurrencyDebug 1 का उपयोग करके मैंने अपने लक्ष्य में -com.apple.CoreData.ConcurrencyDebug 1 ध्वज जोड़ा है। समस्या यह है कि मैं चल रहा है एक पृष्ठभूमि ब्लॉक है, और दुर्घटनाओं जब मैं या तो NSPrivateQueueConcurrencyType या NSMainQueueConcurrencyTypeमेनकॉन्टेक्स्ट और प्राइवेट कॉन्टेक्स्ट

मेरे कोड का उपयोग कर रहा:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
NSManagedObjectContext *privateManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
[privateManagedObjectContext setParentContext:_mainContext]; 
[User fetchUserWithContext:_ privateManagedObjectContext]; 
}]; 

मैं भी कोशिश की है:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
[User fetchUserWithContext:_mainContext]; 
}]; 

दोनों स्थितियों में मैं:

CoreData` + [NSManagedObjectContext Multithreading_Violat ion_AllThatIsLeftToUsIsHonor]:

आपकी मदद के लिए धन्यवाद,

उत्तर

7

है कैसे कोर डाटा कतार संगामिति काम करता है नहीं है। NSPrivateQueueConcurrencyType या NSMainQueueConcurrencyType का उपयोग करते समय, आपको performBlock या performBlockAndWait विधियों का उपयोग NSManagedObjectContext पर जब भी आप संदर्भ तक पहुंचते हैं, का उपयोग करने की आवश्यकता है। तथ्य यह है कि आप यहां जीसीडी का उपयोग कर रहे हैं अप्रासंगिक है; यदि आप कतार समरूपता का उपयोग कर रहे हैं, तो आपको उन विधियों का उपयोग करना होगा, या आप इसे गलत कर रहे हैं।

आपको उन तरीकों में से एक को पारित ब्लॉक के अंदर अपना fetchUserWithContext कॉल करने की आवश्यकता है। आपको उन तरीकों में से किसी एक को पारित ब्लॉक के अंदर संदर्भ से प्राप्त वस्तुओं तक पहुंचने के लिए कुछ भी करने की आवश्यकता है।

+0

मैं अतिथि जो गायब हिस्सा था। धन्यवाद! – Lasti

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