यहाँ मेरी उद्देश्य-सी वर्ग हैं:उद्देश्य-सी कॉल फ़ंक्शन किसी अन्य वर्ग पर?
AppDelegate
SomeScript
मैं कैसे एप्लिकेशन-प्रतिनिधि या किसी अन्य वर्ग से SomeScript वर्ग पर समारोह loggedIn कॉल कर सकते हैं?
धन्यवाद, ईसाई स्टीवर्ट
यहाँ मेरी उद्देश्य-सी वर्ग हैं:उद्देश्य-सी कॉल फ़ंक्शन किसी अन्य वर्ग पर?
AppDelegate
SomeScript
मैं कैसे एप्लिकेशन-प्रतिनिधि या किसी अन्य वर्ग से SomeScript वर्ग पर समारोह loggedIn कॉल कर सकते हैं?
धन्यवाद, ईसाई स्टीवर्ट
(मैं loggedIn
मान लेंगे कोई पैरामीटर लेने एक उदाहरण विधि है।) पहले,:
तो, हमारी नई योजना है पहले इन्स्तांत SomeScript, तो उदाहरण के लिए एक संदेश भेजें।
SomeScript* myScript = [[SomeScript alloc] init]; //First, we create an instance of SomeScript
[myScript loggedIn]; //Next, we send the loggedIn message to our new instance
यह अच्छा है। तथापि! मैं शर्त लगाता हूं कि आप अपनी स्क्रिप्ट को बाद में उपयोग के लिए चिपकाना चाहते हैं। इस प्रकार, हमें वास्तव में इसे अपने ऐप प्रतिनिधि का एक उदाहरण चर बनाना चाहिए। तो, इसके बजाय, AppDelegate में।ज, ब्रेसिज़ के अंदर इस जोड़ें:
SomeScript* myScript;
अब हमारे चर रहेंगे, और इससे पहले से हमारी पहली लाइन बस हो जाता है:
myScript = [[SomeScript alloc] init];
अंतिम जटिलता: हम एक नया बनाने के लिए नहीं करना चाहते हैं प्रत्येक बार जब हम loggedIn
(मुझे लगता है) कहते हैं तो स्क्रिप्ट! इसलिए, आपको कहीं भी तत्काल स्थान देना चाहिए, यह केवल एक बार चलाया जाएगा (उदाहरण के लिए, application:DidFinishLaunchingWithOptions:
)। टा-दा!
आप (मान आप SomeScript एक Singleton वर्ग अपने AppDelegate तरह की जरूरत नहीं है) अपने AppDelegate कक्षा में एक SomeScript वस्तु का एक प्रारंभ संदर्भ होगा। कुछ की तरह:
SomeScript * myScript;
, जबकि अपने application:DidFinishLaunchingWithOptions:
आप इसे inited है (के डिफ़ॉल्ट alloc/init कॉम्बो बुला के साथ लगता है):
myScript = [[SomeScript alloc] init]
यह सब किया गया, जब आपको मेरी स्क्रिप्ट की विधि कॉल करने की आवश्यकता होती है तो आप बस कर सकते हैं:
[myScript myMethod:myParameter]
Here आप कई शब्दावली मुद्दों एप्पल से शुरुआती के लिए एक अच्छी गाइड पा सकते हैं
यदि आप कुछ स्क्रिप्ट के उदाहरणों का उपयोग नहीं करना चाहते हैं ... तो आप एक अलग दृष्टिकोण का पालन कर सकते हैं। अपने कुछ स्क्रिप्ट ऑब्जेक्ट में अधिसूचना भेजने के लिए NSNotificationCenter का उपयोग करें और उसके बाद इसे एक चयनकर्ता चलाएं।
अपने में - (शून्य) awakeFromNib {} विधि, SomeScript से जगह निम्नलिखित कोड:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mySelector:)
name:@"aUniqueNameForTheNotification"
object:nil];
विधि बनाएँ "mySelector:" और अपने loggedIn विधि करने के लिए कॉल करने के लिए।
-(void) mySelector:(id)elem
{
[self loggedIn];
}
तो मत भूलना dealloc पर पर्यवेक्षक दूर करने के लिए है, तो भी अपने SomeScript कक्षा में कोड का निम्न भाग जगह: (loggedIn के साथ सीधे या यदि आप चाहें, तो आप बदल सकते "mySelector"):
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
तो फिर तुम तो जैसे किसी अन्य से एक सूचना भेज सकते हैं: कोड के अंतिम टुकड़ा SomeScript करने के लिए एक सूचना भेजता है और अपने चयनकर्ता निष्पादित किया जाता है
[[NSNotificationCenter defaultCenter] postNotificationName:@"aUniqueNameForTheNotification" object:self];
है।
आशा है कि यह आपको लोगों की मदद करेगी!
हम जब loggedIn विधि SomeScript कक्षा में है [self loggedIn]
है जैसे कि यह कॉल कर सकते हैं, नवीनतम xcode में सरल वाक्यविन्यास का उपयोग कर।
[[SomeScript new] loggedIn];
क्या इसे बाद में हटाने की आवश्यकता है? मुझे लगता है कि एआरसी के साथ कोई रास्ता नहीं है .. – durazno
एआरसी के साथ कोई डीलोकेशन आवश्यक नहीं है। –
आपको मेरी स्क्रिप्ट – JeremyP
@ जेरेमीपी जारी करने पर कुछ जोड़ने की आवश्यकता है: यह उसके ऐपडिलेग में है। @ क्रिस्टियन स्टीवर्ट: जेरेमी का अधिकार, आपको आमतौर पर 'रिलीज' को 'myScript' पर भेजना चाहिए जब आप इसके साथ काम करेंगे। मैंने आपको नहीं बताया क्योंकि मुझे लगता है कि आप इसका उपयोग पूरे समय अपने ऐप के खुले होने पर करेंगे। – andyvn22
यह अच्छी आदतों में पाने के लिए कोई नुकसान नहीं करता है। तकनीकी रूप से, आपको अपने ऐप प्रतिनिधि को कुछ भी जारी करने की आवश्यकता नहीं है क्योंकि ऐप प्रतिनिधि स्वयं अंत तक रहता है। हालांकि, रिलीज डालने की आदत में प्रवेश करना एक अच्छा विचार है। इसे स्वचालित बनने की जरूरत है। – JeremyP