2012-08-13 17 views
11
उपयोग करने के लिए

संभव डुप्लिकेट:
Constants in Objective Cकैसे घोषित करने और NSString वैश्विक स्थिरांक

मैं NSUserDefaults में कुछ एप्लिकेशन सेटिंग की दुकान। एनएसएसटींग्स ​​चाबियों के रूप में उपयोग किया जाता है। समस्या यह है कि मुझे उन एनएसएसटींग कुंजी का उपयोग करके ऐप में इन सेटिंग्स तक पहुंचने की आवश्यकता है। ऐप के कुछ हिस्सों में पहुंचने पर मुझे ऐसी स्ट्रिंग कुंजी को गलत टाइप करने का एक मौका है।

एप्लिकेशन के दौरान, मैं इस तरह के बयानों

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"]; 

BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"]; 

कैसे और कहाँ मैं एक वैश्विक NSString निरंतर जो मैं पूरे एप्लिकेशन में उपयोग कर सकते हैं की घोषणा कर सकते हैं। तब मैं उन स्ट्रिंग कुंजियों को गलत टाइप करने के बारे में चिंता किए बिना उस स्थिर का उपयोग कर पाऊंगा।

उत्तर

5

जो आप खोज रहे हैं वह आपके ऐप में स्ट्रिंग स्थिरांक को परिभाषित करने का एक तरीका है।

this question और इसे करने के लिए this answer, जो मैं नीचे उद्धृत किया है देखें:

आप की तरह

// Constants.h 
FOUNDATION_EXPORT NSString *const MyFirstConstant; 
FOUNDATION_EXPORT NSString *const MySecondConstant; 
//etc. 

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

आप अपने आवेदन/ढांचे के लक्ष्य में जोड़ा जाना चाहिए ताकि यह अंतिम उत्पाद के लिए में जुड़ा हुआ है की तरह

// Constants.m 
NSString *const MyFirstConstant = @"FirstConstant"; 
NSString *const MySecondConstant = @"SecondConstant"; 

Constants.m एक मीटर फ़ाइल में इन स्थिरांक परिभाषित करते हैं।

# define'd स्थिरांक के बजाय स्ट्रिंग स्थिरांक उपयोग करने का लाभ यह है कि आप सूचक तुलना (stringInstance == MyFirstConstant) जो स्ट्रिंग तुलना ([stringInstance isEqualToString:MyFirstConstant]) (और पढ़ने में आसान, IMO) की तुलना में बहुत तेजी से होता है का उपयोग करते हुए समानता के लिए परीक्षण कर सकते हैं है।

बैरी Wark :) के लिए धन्यवाद के साथ

+0

वह बस ऐप में स्थिरांक चाहता है (आंतरिक ली nkage) तो मुझे आश्चर्य है कि आप क्यों सुझाव दे रहे हैं कि वह उन्हें निर्यात (बाहरी संबंध)? – malhal

9

आपका सोचा सही मुझे लगता है कि है।

Const.h

extern NSString *const UserIdPrefKey; 
extern NSString *const PasswordPrefKey; 
extern NSString *const HomepagePrefKey; 

Const.m

#import "AEConst.h" 

NSString *const UserIdPrefKey = @"UserIdPrefKey"; 
NSString *const PasswordPrefKey = @"PasswordPrefKey"; 
NSString *const HomepagePrefKey = @"UrlHomepagePrefKey"; 

केवल Const.h आयात किया जाना चाहिए: उदाहरण के लिए, मैं नीचे की तरह Const.h/मी फ़ाइल बनाया है।

जब आप कोड लिखते हैं, तो एक्सकोड कुंजी नाम लिखने का समर्थन करता है ताकि आप मिस-टाइपिंग से बच सकें।

5

ऐसा करने का सबसे आसान तरीका सरल है। एच फ़ाइल, जैसे यूटिल्स।ज और वहाँ लिखने कोड निम्नलिखित:

#define kUserDefaults @"ReminderSwitch"

+3

हाँ, इतना सुरक्षित नहीं है, किसी अन्य उद्देश्य सी फ़ाइल को ओवरराइड करने का मौका है बिना ध्यान दिए :( – thndrkiss

13

सबसे पहले, आप एक असली extern सी प्रतीक के लिए जाना चाहिए - नहीं एक मैक्रो। यह इतना की तरह किया जाता है:

SomeFile.h

extern NSString *const MONConstantString; 

SomeFile.m

NSString *const MONConstantString = @"MONConstantString"; 

ध्यान दें कि अगर आप ObjC और ObjC के ++ एक मिश्रण का उपयोग, आप सी के लिए extern "C" निर्दिष्ट करना होगा ++ टीयू - यही कारण है कि आप #define डी निर्यात देखेंगे जो भाषा द्वारा भिन्न होता है।


फिर, आप निरंतर इंटरफेस से संबंधित रखना चाहते हैं। लीड के रूप में अपना उदाहरण लेना, आप अपने ऐप की वरीयताओं के लिए इंटरफेस या घोषणाओं का एक सेट चाहते हैं। उस मामले में, आप MONAppsPreferences शीर्षक के घोषणा जोड़ सकते हैं:

MONAppsPreferences.h

extern NSString *const MONApps_Pref_ReminderSwitch; 

MONAppsPreferences.m

NSString *const MONApps_Pref_ReminderSwitch = @"MONApps_Pref_ReminderSwitch"; 

उपयोग में:

#import "MONAppsPreferences.h" 
... 
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:MONApps_Pref_ReminderSwitch]; 
संबंधित मुद्दे