2010-10-19 14 views
6

एक वर्ग नामित विज्ञापन के लिए मेरे .m फ़ाइल में, मैं स्थिर तारउद्देश्य सी - स्टेटिक और वैश्विक चर? 3

static NSString *AdStateDisabled = @"disable"; 
static NSString *AdStateExpired = @"expired"; 
static NSString *AdStateActive = @"active"; 

मैं बस वर्तमान कक्षा में इन स्थैतिक चर का उपयोग कर सकते हैं, लेकिन मैं उन्हें किसी भी अन्य वर्ग से कॉल नहीं कर सकते, है वहाँ एक इन स्थैतिक चर वैश्विक बनाने के लिए रास्ता? तो उदाहरण के लिए मेरे व्यू कंट्रोलर क्लास में मैं कुछ ऐसा कर सकता हूं।

//HomeViewController.m 
if ([self.ad.state isEqual:Ad.AdStateDisabled]) 
{ 
    //do something 
} 

उत्तर

16

आप अपने HomeViewController.h हैडर, जो तब कहीं भी आयात करने के लिए आप तार करने के लिए उपयोग करना चाहता था की आवश्यकता होगी के लिए निम्न घोषणाओं जोड़ सकते हैं।

//HomeViewController.h 
extern NSString *AdStateDisabled; 
extern NSString *AdStateExpired; 
extern NSString *AdStateActive; 

फिर 'स्थिर' को हटाने के लिए अपनी परिभाषाओं को बदलें।

//HomeViewController.m 
NSString *AdStateDisabled = @"disable"; 
NSString *AdStateExpired = @"expired"; 
NSString *AdStateActive = @"active"; 

आप (HomeViewController.h आयात तो आप भी सिर्फ AdState.h में उन लोगों के तार निर्धारित कर सकते हैं और AdState.m में परिभाषाओं डाल करने के लिए है और से उन्हें हटाने के लिए तार का एक उपयोगकर्ता नहीं करना चाहते हैं HomeViewController.m) जिसके बाद स्ट्रिंग के उपयोगकर्ताओं को स्ट्रिंग का उपयोग करने के लिए AdState.h आयात करने की आवश्यकता होगी।

+0

अरे मैंने कुछ समय पहले एक गड़बड़ी की, एआरसी संगत नहीं, लेकिन वास्तव में इसे असाइन विधियों का उपयोग करके और मजबूत या कमजोर संदर्भ निर्दिष्ट करके एआरसी में उपयोग किया जा सकता है। मूल प्रश्न पूछने के लिए यह थोड़ा करीब है: https://gist.github.com/darionco/03649feeee57f86fee3f – Dario

8

सबसे पहले, स्थैतिक को हटा दें। सी और उद्देश्य-सी में स्टेटिक चर और फ़ंक्शन का अर्थ है कि वे केवल वर्तमान संकलन इकाई के लिए दृश्यमान हैं (जो कम या कम है: केवल वह फ़ाइल जिसे आपने स्टेटिक्स चर घोषित कर दिया है उसे देख सकता है)।

extern NSString *AdStateDisabled; 

फिर आप उन अन्य फ़ाइलों में के रूप में उपयोग कर सकते हैं:

इसके बाद, आप भी "extern" के साथ एक सार्वजनिक हेडर फाइल में चर घोषित करने के लिए, की जरूरत वर्ग में से एक वर्ग के साथ जुड़े की तरह अच्छा, लेकिन आप उन्हें "Ad.AdStateDisabled" के रूप में नहीं पहुंच पाएंगे, बल्कि "AdStateDisabled" के रूप में।

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