2016-09-06 11 views
15

के साथ newBackgroundContext() से अपडेट प्राप्त नहीं हो रहा है मेरे आवेदन में, मेरे पास UITableView में कोर डेटा ऑब्जेक्ट्स लोड करने के लिए NSFetchResultController है। इस एफआरसी से जुड़े fetch अनुरोध NSPersistentContainer (आईओएस 10) के लिए उपलब्ध नई viewContext संपत्ति का उपयोग करता है।कोर डेटा आईओएस 10: viewContext को NSBetchResultController

जब मैं कोई सेल चुनता हूं, तो मैं कोर डेटा ऑब्जेक्ट को एक नए व्यू कंट्रोलर पर पास करता हूं। यह नया वीसी अभी भी viewContext का उपयोग करता है। इस व्यू कंट्रोलर से, मैं कोर डेटा ऑब्जेक्ट को वैकल्पिक रूप से प्रस्तुत व्यू कंट्रोलर से अपडेट कर सकता हूं। ऐसा करने के लिए, मैं मोडल व्यू कंट्रोलर के लिए newBackgroundContext() का उपयोग करता हूं। मैं किसी भी मुद्दे के बिना अद्यतन कोर डेटा ऑब्जेक्ट को सहेज सकता हूं।

समस्या यह है कि FRC स्वचालित रूप से पृष्ठभूमि संदर्भ से अद्यतन कोर डेटा ऑब्जेक्ट के साथ अद्यतन नहीं होता है। ऐसा लगता है कि viewContext कोर डेटा ऑब्जेक्ट अपडेट को प्राप्त नहीं कर रहा था।

यदि मैं viewContext (ऐप चौड़ा) के लिए automaticallyMergesChangesFromParent सत्य पर सेट करता हूं, तो जब मैं पृष्ठभूमि संदर्भ को सहेजता हूं तो एफआरसी अद्यतन कोर डेटा ऑब्जेक्ट प्राप्त करता है। मेरी समझ से, viewContext को डेटा के विलय को स्वचालित रूप से प्रबंधित करना चाहिए। प्रलेखन व्यू कॉन्टेक्स्ट का वर्णन करता है: "यह संदर्भ पीढ़ी के लिए कॉन्फ़िगर किया गया है और स्वचालित रूप से अन्य संदर्भों से अधिसूचनाओं को सहेजने के लिए कॉन्फ़िगर किया गया है।"

क्या आप NSFetchResultController के साथ विभिन्न संदर्भों को संभालने के तरीके को स्पष्ट कर सकते हैं?

धन्यवाद, एक्सल

उत्तर

5

मैं इस में सीधे नहीं चला है, लेकिन आपकी समस्या मुझे अजीब के रूप में हमलों यदि newBackgroundContext किसी भी के बाद से viewContext तहत स्तरित वास्तव में नए संदर्भ से बचाने के थे केवल viewContext को अपडेट करेंगे , जो लगातार स्टोर में परिवर्तन प्राप्त करने के लिए अपनी खुद की बचत करना होगा (जो आप कहते हैं कि ठीक से हो रहा है)।

इस पद्धति लागू (newBackgroundContext()) बना सकते हैं और concurrencyType privateQueueConcurrencyType करने के लिए सेट के साथ एक नया NSManagedObjectContext वापस जाने के लिए लगातार कंटेनर का कारण बनता है: कि संदेह के आधार पर, मैं डेवलपर दस्तावेज़ जहां एप्पल का कहना है कि देखा। यह नया संदर्भ NSPersistentStoreCoordinator से सीधे से जुड़ा होगा और स्वचालित रूप से NSManagedObjectContextDidSave प्रसारणों का उपभोग करने के लिए सेट है।

इस प्रकार, यह viewContext के साथ अभिभावक-बाल संबंध में नहीं होगा। मार्गदर्शन के आधार पर, ऐसा लगता है कि नया संदर्भ पुराने द्वारा किए गए परिवर्तनों के बारे में अधिसूचित किया जाएगा, लेकिन इसके विपरीत नहीं, इसलिए जब आप नए संदर्भ में परिवर्तन करते हैं तो आपको व्यू कॉन्टेक्स्ट पर रीफ्रेश करना होगा, जो आप प्रोग्रामेटिक रूप से कर सकते हैं यदि आप कर सकते हैं ट्रैक को ट्रिगर करने के लिए अपने कोड में या शायद एनएसएमएनेज्ड ऑब्जेक्ट्स कॉन्टेक्स्ट में परिवर्तन अधिसूचनाओं में से एक का उपयोग करें।

+2

प्रलेखन (NSManagedObjectContext.h में) कहते हैं:" चाहे संदर्भ स्वचालित रूप से अपने समन्वयक को बचाया परिवर्तन विलीन हो जाती है या माता-पिता संदर्भ। जब इस संदर्भ को गैर-वर्तमान क्वेरी पीढ़ी के लिए पिन किया गया है, तो इस संपत्ति को YES पर सेट करना समर्थित नहीं है "। ऐसा लगता है कि किसी भी अभिभावक के मामले को" स्टोर समन्वयक "द्वारा कवर नहीं किया गया है .viewCoordinator और .newBackgroundContext एक ही स्टोर समन्वयक साझा करते हैं (मैंने अभी इसे चेक किया है)। तो सेटिंग। स्वचालित रूप से मेर्गेस चेंजप्रोमेंट का परिणाम अपेक्षित व्यवहार होगा। –

19

आप सही व्यवहार देख रहे हैं। यदि आप चाहते हैं कि आपका व्यू कॉन्टेक्स्ट स्वचालित रूप से newBackgroundContext() द्वारा बनाए गए अन्य संदर्भों से परिवर्तनों को चुनने के लिए, आपको automaticallyMergesChangesFromParent से true पर सेट करना होगा।

मैं सहमत हूं कि दस्तावेज़ उस बिंदु पर उलझन में हैं, "... और स्वचालित रूप से अन्य संदर्भों से अधिसूचनाओं को सहेजने के लिए।"माता-पिता इस तरह viewContext पर स्थापित करने के लिए की जरूरत है से

+2

मेरे लिए काम नहीं कर रहा है! – Ramis

+1

मेरे लिए काम करता है। सलाह के लिए धन्यवाद! – glebus

+2

मेरे लिए भी काम नहीं कर रहा है !!! – Satyam

4

स्वचालित रूप से परिवर्तन मर्ज: .automaticallyMergesChangesFromParent के लिए

persistentContainer.viewContext.automaticallyMergesChangesFromParent = true 
संबंधित मुद्दे