2009-03-09 29 views
36

मुझे उद्देश्य-सी में बूलियन की एक सरणी का उपयोग करने की आवश्यकता है। मैं यह ज्यादातर की स्थापना की है, लेकिन संकलक निम्नलिखित बयान पर एक चेतावनी फेंकता है:उद्देश्य सी बूलियन ऐरे

[updated_users replaceObjectAtIndex:index withObject:YES]; 

यह है मैं, यकीन है क्योंकि हाँ बस एक वस्तु नहीं है, यह एक आदिम है। भले ही, मुझे ऐसा करने की ज़रूरत है, और इसे पूरा करने के तरीके पर सलाह की सराहना करेंगे।

धन्यवाद। अपनी आवश्यकताओं पर निर्भर करता है

[updated_users replaceObjectAtIndex:index 
         withObject:[NSNumber numberWithBool:YES]]; 

या का उपयोग एक सी सरणी,:

+3

के बराबर है जब एक चेतावनी के बारे में पूछ सवाल :) –

उत्तर

69

हां, यही वास्तव में यह क्या है: एन एस * कंटेनर केवल उद्देश्य सी स्टोर कर सकते हैं वस्तुएं, आदिम प्रकार नहीं।

आप आप क्या चाहते हैं पूरा करने के लिए एक NSNumber में इसे लपेटकर द्वारा सक्षम होना चाहिए: जो लपेटता

[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

या @(YES) का उपयोग करके एक BOOL एक NSNumber

[updated_users replaceObjectAtIndex:index withObject:@(YES)]]

में फिर आप boolValue खींच सकते हैं:

BOOL mine = [[updated_users objectAtIndex:index] boolValue];

11

आप या तो NSNumbers स्टोर कर सकते हैं

BOOL array[100]; 
array[31] = YES; 
14

अपने सरणी मान लिया जाये कि वैध ऑब्जेक्ट हैं (और एक सी शैली नहीं है सरणी):

#define kNSTrue   ((id) kCFBooleanTrue) 
#define kNSFalse  ((id) kCFBooleanFalse) 
#define NSBool(x)  ((x) ? kNSTrue : kNSFalse) 

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)]; 
+2

में चेतावनी मैं पता लगाने के लिए उत्सुक हूँ पोस्ट करें क्यों Nicks जवाब यह एक से इतना अधिक समर्थन मिला , क्योंकि यह अधिक सुरुचिपूर्ण लगता है। क्या कोई अंतर समझ सकता है? – Chris

8

जॉर्ज की तरह, एक सी-सरणी का उपयोग करें।

BOOL myArray[10]; 

for (int i = 0; i < 10; i++){ 
    myArray[i] = NO; 
} 

if (myArray[2]){ 
    //do things; 
} 

मार्टिजन, "myArray" वह नाम है जिसका उपयोग आप जॉर्ज के उदाहरण में "सरणी" करते हैं।

1

यदि आपका संग्रह बड़ा है या आप इसे ओबीजेसी ऑब्जेक्ट्स से तेज़ होना चाहते हैं, तो कोरफॉउंडेशन में CFBitVector/CFMutableBitVector प्रकारों को आजमाएं। यह सीएफ-संग्रह प्रकारों में से एक है जो एनएस समकक्ष के साथ जहाज नहीं है, लेकिन अगर वांछित हो तो इसे ओबीजेसी कक्षा में लपेटा जा सकता है।

3

एक्सकोड 4.4 से आप उद्देश्य-सी अक्षर का उपयोग कर सकते हैं।

[updated_users replaceObjectAtIndex:index withObject:@YES];

कहाँ @YES[NSNumber numberWithBool:YES]

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