2012-03-16 14 views
7

यह एक बहुत ही बुनियादी सवाल है, लेकिन मैंने पूरी तरह से खोज की है और मुझे ऐसा कोई जवाब नहीं मिला है जो मेरे सिर को पाने के लिए पर्याप्त रूप से समझाता है।किसी एक वर्ग से दूसरे वर्ग में विधि को कॉल करने के लिए कैसे करें (आईओएस)

मैं जो करना चाहता हूं वह मेरे आईओएस ऐप के एक वर्ग में एक विधि बनाना है और फिर मेरे ऐप में अन्य कक्षाओं से उस विधि को कॉल करें। क्या कोई इसे समझाने के लिए मुझे क्या करने की ज़रूरत है? किसी भी मदद की बहुत सराहना की जाएगी क्योंकि मेरे सभी प्रयास अब तक विफल हो गए हैं!

धन्यवाद।

+2

मुझे लगता है कि आपका प्रश्न थोड़ा अस्पष्ट है। आप इसे किसी भी मूल ऐप में पहले ही कर चुके होंगे। अर्थात। वस्तुओं पर कॉलिंग विधियों। क्या आप कोड नमूने दे सकते हैं जो आप दिखा रहे हैं कि आप क्या करने की कोशिश कर रहे हैं? – drekka

+0

आप NSNotificationCenter या Delegates या अपने कस्टम प्रोटोकॉल का उपयोग कर सकते हैं .... –

उत्तर

43

ऑब्जेक्टिव-सी:

आप वर्ग कि विधि आप का उपयोग करना चाहते हैं के शीर्षक आयात करने के लिए है (ClassYouWantToUse.h) वर्ग आप पर इसका उपयोग करना चाहते में (TargetClass)।

TargetClass.h या TargetClass.m अंदर (कार्यक्षेत्र के आधार पर आप इसे देना चाहता हूँ):

#import "ClassYouWantToUse.h" 

फिर कक्षा का एक उदाहरण के रूप में आप या तो एक लक्ष्य वर्ग के अंदर उपयोग करना चाहते हैं बनाने इस तरह संपत्ति:

@property (nonatomic,strong) ClassYouWantToUse *classObject; 

या इस तरह एक उदाहरण चर के रूप में:

ClassYouWantToUse *classObject; 

सुनिश्चित करें कि आप इसे आरंभ करें! (आमतौर पर viewDidLoad के अंदर):

classObject = [[ClassYouWantToUse alloc] init]; 

अब आप इस तरह उस वर्ग से किसी भी सार्वजनिक तरीकों कॉल कर सकते हैं:

[classObject theClassMethodWithParam:param1 andSecondParam:param2]; 

नोट: ClassYouWantToUse वर्ग तरीकों कि आप सुलभ बनाना चाहते होना आवश्यक है दूसरों को हेडर फ़ाइल में घोषित करके:

- (void)theClassMethodWithParam:(UIImage*)someImage andSecondParam:(NSString*)someText; 

अन्यथा आप इन विधियों को देखने में सक्षम नहीं होंगे।


स्विफ्ट:

थेरेस वास्तव में तेजी से इसके बारे में कुछ खास नहीं, बस एक संदर्भ के रूप में जोड़े।

तेजी में आप बस वर्ग का उपयोग करना चाहते का एक उदाहरण बनाने के लिए:

let classObject = ClassYouWantToUse() 

और यह सीधे का उपयोग करें:

classObject.theClassMethodWithParam(param1, andSecondParam:param2) 
+0

धन्यवाद ** तो ** बहुत कुछ! आप कल्पना नहीं कर सकते कि मैंने इसे समझने की कोशिश कर कितनी पोस्ट पढ़ी हैं। जैसा कि मैं चाहता था बस काम करना! –

+0

लुइस ऑस्कर, आप सुंदर आदमी! – Ian

+0

उत्सुक हालांकि क्लासटेब्यूयूड के दो उदाहरण होने का उचित समाधान क्या है? क्योंकि * ClassToBeUsed में स्वयं वापस कुछ नहीं है? तो इस उदाहरण में यदि मैं स्वयं से संदर्भित करता हूं [कुछ ऐसा कुछ विथपाराम: ब्लाब्ला और सेकेंडपाराम: अन्यबाला] यह कुछ * संदर्भित करेगा। अगर मुझे ClassToBeUsed के मूल उदाहरण को संदर्भित करने की आवश्यकता है तो क्या होगा? – rick

3

आप दो बुनियादी विकल्प होते हैं। आप या तो प्रथम श्रेणी के पहले वर्ग के उदाहरण को बना या पास कर सकते हैं, या आप प्रथम श्रेणी में एक स्थिर विधि जोड़ सकते हैं और क्लास ऑब्जेक्ट का उपयोग करके इसे सीधे कॉल कर सकते हैं।

उदाहरण के लिए, मान लीजिए कि आप है:

@interface ClassA : NSObject { 
} 

//instance methods 
- (int) addNumber:(int)num1 withNumber:(int)num2; 

//static/class methods 
+ (int) add:(int)num1 with:(int)num2; 
@end 

@implementation ClassA 
- (int) addNumber:(int)num1 withNumber:(int)num2 { 
    return num1 + num2; 
} 

+ (int) add:(int)num1 with:(int)num2 { 
    return num1 + num2; 
} 
@end 

तो फिर तुम कर सकते हैं:

#import "ClassA.h" 

@interface ClassB : NSObject { 
    ClassA* adder; 
} 

//constructors 
- (id) init; //creates a new instance of ClassA to use 
- (id) initWithAdder:(ClassA*)theAdder; //uses the provided instance of ClassA 

//instance methods 
- (int) add2To:(int)num; 

//static/class methods 
+ (int) add3To:(int)num; 
@end 

@implementation ClassB 
- (id) init { 
    if (self = [super init]) { 
     adder = [[ClassA alloc] init]; 
    } 
    return self; 
} 

- (id) initWithAdder:(ClassA*)theAdder { 
    if (self = [super init]) { 
     adder = theAdder; 
    } 
    return self; 
} 

- (int) add2To:(int)num { 
    return [adder addNumber:2 withNumber:num]; 
} 

+ (int) add3To:(int)num { 
    return [ClassA add:3 with:num]; 
} 
@end 

ध्यान दें कि ज्यादातर मामलों में, आप उदाहरण के तरीकों के बजाय स्थिर तरीकों की तुलना में प्रयोग करेंगे।

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