2010-01-05 9 views
20

मैं कैसे जांचूं कि कोई उद्देश्य उद्देश्य-सी (आईफोन) में सेट है या नहीं?जांचें कि कोई बूल सेट है (== शून्य के साथ नहीं किया जा सकता है)

मुझे पता है कि यह एक इंट या फ्लोट के साथ किया जा सकता है: NSNumber * Num = [prefs floatForKey: @ "key"]; उदाहरण के लिए

उत्तर

39

आप नहीं कर सकते। BOOL या तो YES या NO है। कोई अन्य राज्य नहीं है। इसके आसपास का तरीका NSNumber ([NSNumber numberWithBool:YES];) का उपयोग करना होगा, और फिर यह देखने के लिए जांचें कि NSNumber स्वयं nil है या नहीं। या यह इंगित करने के लिए कि आपने पहले के मान को बदल दिया है या नहीं, दूसरा BOOL है।

+4

असल में, 'BOOL' 'YES' या' NO' नहीं हो सकता है। 'बूल' के साथ काम करने का एकमात्र सुरक्षित तरीका यह जांचना है कि यह या तो 'नहीं' या 'नहीं' है। 'हस्ताक्षर' के लिए 'BOOL'' typedef' है। – dreamlax

+3

@dreamlax सच है, आप एक बूल को 1 या 2 पर सेट कर सकते हैं, लेकिन मेरे लिए टाइपिफ़ के उद्देश्य के विकृति की तरह लगता है। –

+1

@ डेव, यह केवल आकलन के बारे में नहीं है, उदाहरण के लिए यदि कोई 'BOOL' एक विधि का रिटर्न वैल्यू है जो' char' के आकार वाले बिटमास्क ऑपरेशन के आधार पर केवल एक मान देता है तो वापसी मान 0 या 0 नहीं हो सकता है 1. आदर्श रूप से विधि को वापस लौटना चाहिए ((झंडे और मुखौटा) == मुखौटा) 'लेकिन ऐसा करने की आवश्यकता नहीं है। – dreamlax

5

परेशान, उद्देश्य-सी में कोई बूलियन वर्ग नहीं है। यह निश्चित रूप से ऐसा लगता है जैसे यह होना चाहिए और यह बहुत से लोगों को यात्रा करता है। संग्रह और मूल डेटा में, सभी बूल NSNumber उदाहरणों के रूप में संग्रहीत होते हैं।

यह वास्तव में हर समय आगे और पीछे परिवर्तित होने के लिए परेशान है।

+0

आपको बूलियन क्लास प्राप्त करने के लिए क्या मिलेगा जो आपके पास NSNumber के साथ नहीं है? आपको अभी भी एनएसएआरएआरई और कोर डेटा जैसी चीजों में भंडारण के लिए स्केलर बूल के साथ आगे और पीछे परिवर्तित करना होगा। –

2

डिफ़ॉल्ट रूप से, उद्देश्य-सी में एक बूल मान 0 पर सेट किया गया है, इसलिए आपको यह जांचने की आवश्यकता नहीं है कि आपका बूल मान किसी भी समय शून्य है या नहीं।

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