2011-10-17 19 views
10

का उपयोग करते समय NSManagedObjectContext प्राप्त करें कोर डेटा के साथ काम करने के लिए वर्तमान NSManagedObjectContext प्राप्त करना है। iOS 4.3 में मैं UINavigationController के प्रतिनिधि सेट AppDelegate इसलिए की तरह (AppDelegate.m में) होने के लिए:स्टोरीबोर्ड

self.navigationController.delegate = self; 

और मैं कुछ इस तरह कर सकता है (मैं जहाँ भी संदर्भ आवश्यक):

NSManagedObjectContext *context = [self.navigationController.delegate performSelector:@selector(managedObjectContext)]; 

अब, आईओएस 5 में, मैं स्टोरीबोर्ड का उपयोग कर रहा हूं और मुझे यह समझने में मुश्किल हो रही है कि इसे कैसे प्राप्त किया जाए। मैंने पहली बार एक प्रतिनिधि का उपयोग किया क्योंकि मुझे नहीं लगता कि आप हर समय अपने AppDelegate.h को पास करना चाहते हैं।

उत्तर

12

@Rose - फिर? यह बेहद एप्पल द्वारा भी हतोत्साहित किया जाता है:

एप्पल Doc से:

एक दृश्य नियंत्रक आम तौर पर इस तरह के आवेदन के रूप में एक वैश्विक वस्तु से संदर्भ प्राप्त नहीं की जा चाहिए प्रतिनिधि-इस आवेदन वास्तुकला कठोर बना देता है। न ही एक व्यू कंट्रोलर अपने स्वयं के उपयोग के लिए एक संदर्भ बना सकता है (जब तक कि यह एक नेस्टेड संदर्भ नहीं है)। इसका मतलब यह हो सकता है कि नियंत्रक के संदर्भ का उपयोग करके किए गए संचालन अन्य संदर्भों के साथ पंजीकृत नहीं हैं, इसलिए अलग-अलग दृश्य नियंत्रकों के डेटा पर अलग-अलग दृष्टिकोण होंगे।

अनुशंसित तरीका:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
MasterViewController *controller = (MasterViewController *)navigationController.topViewController; 
controller.managedObjectContext = self.managedObjectContext; 
return YES; 
} 
+0

हालांकि यह विषय पुराना है, आप सही हैं और इसलिए मैंने इसे सही उत्तर के रूप में चिह्नित किया है। – mmvie

+2

क्या होगा यदि आप एक दृश्य नियंत्रक को प्रबंधित ऑब्जेक्ट संदर्भ पास करना चाहते हैं और यह एप्लिकेशन के पास कहीं भी नहीं है DidFinishLaunching? यह केवल मेरे ऐप में कहीं और 5 स्तर गहरे बनाया गया है। – user798719

+0

@ user798719 इसे इंजेक्ट करने के लिए यह बुरा अभ्यास नहीं है। आईओएस मंच में उपलब्ध निर्भरता इंजेक्शन ढांचे पर एक नज़र डालें – badeleux

11

अगर यह तुम क्या जरूरत है मैं नहीं जानता, लेकिन यह मदद मिल सकती है:
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];

+0

बिल्कुल सही है, धन्यवाद! – mmvie

+0

दोस्त, बहुत धन्यवाद !! – Farini

+0

मुझे लगता है कि मैंने ऐप प्रतिनिधि से दृश्य में [प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट] को कैसे पारित किया है, यह जानने का प्रयास करने में बहुत अधिक समय बिताया है, निश्चित रूप से एक बेहतर समाधान केवल अपर्याप्त से मिलना है। बहुत बढ़िया! – Farini