2009-03-18 19 views
8

शायद इसके लिए एक बहुत ही सरल समाधान है लेकिन मैं इसे काम नहीं कर सकता।मैं किसी अन्य वर्ग से चर का उपयोग कैसे कर सकता हूं?

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

+0

"मैं अपने कोको फाइल में कई वर्गों मिला है।" हमेशा की तरह प्रत्येक वर्ग के लिए फ़ाइलें (MyClass.h, MyClass.m) की एक जोड़ी बनाने के लिए है। आप प्रोजेक्ट में किसी समूह पर राइट-क्लिक करके और फ़ाइल जोड़ें पर क्लिक करके ऐसा कर सकते हैं। आप एमएम बनायेंगे, और .एच मुफ्त में आ जाएगा। –

+1

प्रत्यक्ष रूप से आवृत्ति चर का उपयोग करना एक बहुत बुरा विचार है। गुणों का उपयोग करें, और या तो एक्सेसर्स को संश्लेषित करें या अपना खुद का लिखें। प्रत्यक्ष चर का उपयोग मैक ओएस एक्स पर KVO तरह बातें और बाइंडिंग टूट जाता है, और यह अच्छा OO अभ्यास नहीं है। – Alex

उत्तर

13

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

@interface Class1 
{ 
    int var; // @protected by default 
} 
@property (readwrite, nonatomic) int var; 
// methods... 
@end 

@implementation Class1 
@synthesize var; 
... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj.var = 3; // implicitly calls [obj setVar:3] 
int x = obj.var; // implicitly calls x = [obj var]; 
+2

संपत्ति दृष्टिकोण कहीं बेहतर है, IMHO – Abizern

6

आप एक संपत्ति के रूप में class2 में चर का पर्दाफाश हो सकता है:

@interface Class1 
{ 
@public 
    int var; 
} 
// methods... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj->var = 3; 

यह एक संपत्ति बनाने के लिए। यदि कक्षा 1 में कक्षा 2 का संदर्भ है, तो कक्षा 1 चर को देख सकता है। ईमानदारी से, हालांकि, ऐसा लगता है कि आप उद्देश्य-सी और ऑब्जेक्ट उन्मुख प्रोग्रामिंग दोनों के लिए शुरुआत कर रहे हैं। मैं आपको दोनों पर और अधिक पढ़ने की सलाह देते हैं।

Here is a place ऑब्जेक्टिव-सी के साथ ऑब्जेक्ट उन्मुख प्रोग्रामिंग के लिए शुरू करने के लिए।

+3

है "stackoverflow.com" केवल उन्नत उपयोगकर्ताओं के लिए? शुरुआती कौन है, और कौन नहीं है परिभाषित करने के लिए कैसे।लड़के ने सवाल नहीं दिया कि उद्देश्य कहां सी सीखना है। –

+3

ईमानदारी से @DariusMiliauskas से सहमत: पी – preetam

3

ऐसी फ़ाइल बनाने का प्रयास करें जो आपके चर को रखता है जिसे पूरे ऐप में एक्सेस करने की आवश्यकता है।

extern NSString *stringVariable; 

@interface GlobalVariables 

@property (retain, nonatomic) NSString *stringVariable;  

@end 

और GlobalVariables.m फ़ाइल में जब तक आप GlobalVariables.h जिसमें कभी .m फ़ाइलें आयात आपको लगता है कि चर आप में प्रदान कर सकते हैं और पहुँच का उपयोग करने की जरूरत है

#import "GlobalVariables.h" 

@implements GlobalVariables 

@synthesize stringVariable; 

NSString *stringVariable; 

@end 

और फिर जोड़ने अपने कार्यक्रम में कहीं भी।

संपादित

मेरा जवाब है कि मैं ऊपर दे दिया है अलग ढंग से नहीं जिस तरह से मैं अब इस करने के बारे में जाना होता है। यह होगा अधिक

@interface MyClass 

@property (nonatomic, strong) NSString *myVariable; 

@end 
तो .m फ़ाइल

@implementation MyClass 

@sythesize = myVariable = _myVariable; // Not that we need to do this anymore 

@end 

फिर कुछ विधि में एक और कक्षा में में

जैसे मैं

// ..... 
MyClass *myClass = [[MyClass alloc] init]; 
[myClass setMyVariable:@"My String to go in my variable"]; 
// ..... 
1

"XCode" में होता है आप की जरूरत है आयात करते हैं, संपत्ति के रूप में यह घोषणा करके वस्तु बनाने, और उसके बाद का उपयोग करें "object.variable" वाक्य रचना। फ़ाइल "Class2.m" निम्न तरीके से दिखाई देगी:

#import Class2.h 
#import Class1.h; 

@interface Class2() 
... 
@property (nonatomic, strong) Class1 *class1; 
... 
@end 

@implementation Class2 

//accessing the variable from balloon.h 
...class1.variableFromClass1...; 

... 
@end 

धन्यवाद! :-)

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