2009-06-15 4 views
7

मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जो बाहरी डेटा MySQL सर्वर में रखता है, लेकिन इसे बेहतर प्रतिक्रिया समय के लिए कोर डेटा का उपयोग करके स्थानीय रूप से कैश करता है। मूल रूप से, मैं क्या करना चाहते हैं यह है:NSFetchedResultsController के अपडेट नतीजे बिना किसी नए fetch

  1. (NSFetchedResultsController का उपयोग कर SQLite डेटा स्टोर,) कोर डाटा से डेटा प्राप्त करें और यह पृष्ठभूमि में
  2. MySQL सर्वर से ले लो नए आइटम दिखाते
  3. डेटा के नए सेट (नए और पुराने दोनों आइटम) के साथ वर्तमान तालिका दृश्य को रीफ्रेश करें

मेरे पास यह अंतिम चरण को छोड़कर यह सब काम कर रहा है। मैं NSFetchedResultsController को डेटा के सेट को अपडेट करने का तरीका समझ नहीं सकता हूं। अब तक, मैं सीधे अपने NSManagedObjectContext में आइटम डाले की कोशिश की है:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
           inManagedObjectContext:[fetchedResultsController 
                 managedObjectContext]];

मैं भी कोशिश की है क्या एप्पल उनके CoreDataBooks उदाहरण में करता है, और एक अलग "जोड़ने" प्रबंधित वस्तु संदर्भ और mergeChangesFromContextDidSaveNotification: के लिए एक कॉल का इस्तेमाल किया। न तो मेरे fetched परिणाम नियंत्रक के प्रबंधित ऑब्जेक्ट संदर्भ में वर्तमान में NSManagedObject * के सेट को बदलना प्रतीत होता है।

मैं वर्तमान में प्रबंधित एक NSFetchedResultsController ऑब्जेक्ट्स के सेट को अपडेट करने के बारे में कैसे जाउंगा?

उत्तर

4

मुझे पता चला कि मेरी समस्या यह नहीं थी कि ऑब्जेक्ट अपडेट नहीं हो रहे थे, लेकिन NSFetchedResultsController इंस्टेंस मैं अपने सेक्शन इंडेक्स टाइटल को ठीक से अपडेट नहीं कर रहा था, और इसलिए मैं अपने UITableView में परिणाम नहीं देख सका।

किसी प्राप्त परिणाम नियंत्रक से प्रबंधित ऑब्जेक्ट संदर्भ को अद्यतन करना नियंत्रक के परिणाम ऑब्जेक्ट सेट को अद्यतन करता है।

7

बस अपनी समस्या है और हां स्पष्ट रूप से अधिसूचनाओं का उपयोग करना अनूठा तरीका है जब आप एक टेबलव्यू रीफ्रेश कर सकते हैं जब तालिका nsfetchedresults नियंत्रक का उपयोग करती है।

कोर databooks नमूने में की तरह:
चरण 1:
चरण 2 अधिसूचना NSManagedObjectContextDidSaveNotification के लिए NSNotificationCenter को एक पर्यवेक्षक जोड़ें: अपने संदर्भ (अपने चयनकर्ता के लिए अधिसूचना ट्रिगर)
चरण 3 को बचाने: आपके चयनकर्ता विधि में: विधि mergeChangesFromContextDidSaveNotification
चरण 4: अधिसूचना केंद्र से पर्यवेक्षक को हटाकर संदर्भ में परिवर्तनों को मर्ज करें।

व्यक्तिगत तौर पर मैं अधिसूचना certer बायपास करने के लिए और केवल अपने dammit ताज़ा :)

+0

यह वास्तव में विधि मैं प्रयोग किया जाता है, और मैं इस बारे में सोच संदर्भ बता चाहते हैं जिस तरह से एप्पल से कुछ में यह करता है उनके कोर डेटा उदाहरण। – Tim

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