2008-10-23 12 views
83

मेरे पास एक प्रोजेक्ट है जो नेविगेशन आधारित एप्लिकेशन टेम्पलेट पर आधारित है। ऐपडिलेगेट में -applicationDidFinishLoading: और -applicationWillTerminate: विधियां हैं। उन तरीकों से, मैं एप्लिकेशन डेटा लोड और सहेज रहा हूं, और इसे एक आवृत्ति चर में संग्रहीत कर रहा हूं (यह वास्तव में एक ऑब्जेक्ट-ग्राफ़ है)।ऐपडिलेगेट इंस्टेंस वैरिएबल का संदर्भ

जब एप्लिकेशन लोड होता है, तो यह मेनविंडो.एक्सिब लोड करता है, जिसमें नेविगेशन कोन्रोलर होता है, जिसके बदले में रूटव्यू कंट्रोलर होता है। RootViewController nibName रूटव्यू (मेरे वास्तविक नियंत्रक वर्ग) के लिए संपत्ति बिंदु।

मेरी कक्षा में, मैं उस ऑब्जेक्ट को संदर्भित करना चाहता हूं जिसे मैंने -applicationDidFinishLoading: विधि में बनाया है, ताकि मैं इसका संदर्भ प्राप्त कर सकूं।

क्या कोई मुझे बता सकता है कि यह कैसे करें? मुझे पता है कि मैंने ऑब्जेक्ट्स के बीच संदर्भ कैसे दिया है, जिसे मैंने प्रोग्रामेटिक रूप से बनाया है, लेकिन मुझे लगता है कि एनआईबी फाइल के भीतर से मध्य कदम किया गया था, लेकिन मुझे अपने रास्ते को थ्रेड करने के लिए प्रतीत नहीं होता है।

उत्तर

15

यदि मैं आपका प्रश्न समझता हूं, तो आप अपने AppDelegate ऑब्जेक्ट में सदस्य चर/गुणों का संदर्भ देना चाहते हैं? सबसे आसान तरीका है [[UIAplplication sharedAplication] प्रतिनिधि] का उपयोग अपने ऑब्जेक्ट का संदर्भ वापस करने के लिए।

आप एक संपत्ति बुलाया खिड़की मिल गया है, तो आप ऐसा कर सकते हैं:

UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; 
//do something with mainWindow 
203

चर (आमतौर पर मॉडल डेटा संरचना) जो मैं एप्लिकेशन में कहीं इसे उपयोग करने की आवश्यकता है के लिए, में उन्हें घोषित अपने AppDelegate कक्षा। जब आप इसे संदर्भ की जरूरत है:

UIApplication *myApplication = [UIApplication sharedApplication]; 
UIWindow *mainWindow = [myApplication keyWindow]; 
UIViewController *rootViewController = [mainWindow rootViewController]; 

या, एक पंक्ति में,

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController]; 

मत करो:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; 
//and then access the variable by appDelegate.variable 
+7

मैं इस एक को वोट किया क्योंकि आप डाली कहा, आप के लिए AppDelegate कास्ट करने के लिए की जरूरत है अपना खुद का प्रकार ताकि आप अपनी खुद की संपत्तियों को सेट कर सकें। आप "AppDelegate" को कास्ट नहीं करके इसे और अधिक स्पष्ट करने के लिए संपादित कर सकते हैं ... –

+0

क्या ऐप प्रतिनिधि नाम या उसके किसी भी सदस्य के संदर्भ के बिना रूट व्यू कंट्रोलर तक पहुंचने का कोई तरीका है? (मैं कुछ पोर्टेबल कोड लिखना चाहता हूं जिसके लिए रूट व्यू कंट्रोलर की आवश्यकता है।) – SK9

+0

एसके 9, प्रत्येक आईओएस ऐप में ऐप डिलीगेट होना चाहिए, इसलिए कोड पोर्टेबल होगा! – Daniel

11

यहाँ iOS4.0 के लिए और एक अच्छी तरह से परिभाषित पोर्टेबल विकल्प है विंडो की rootViewController संपत्ति (आईबी में कहें) सेट करना भूलें या यह जैक करेगा।

1

मैं किसी मैक्रो को परिभाषित करने और इस तरह इसका इस्तेमाल: -

#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate) 

मेरे कोड में: -

appDelegateShared.myVariable=anotherVariable; 
संबंधित मुद्दे