2011-03-19 9 views
33

मुझे एक बूल पॉइंटर को मान असाइन करने के तरीके पर भ्रम है? यहाँ मेरी कोड है:उद्देश्य-सी में एक बूल पॉइंटर को मान कैसे असाइन करें?

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    self.latitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 
    self.longitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude]; 

    if (!initialBroadcast) { 
     initialBroadcast = YES; // Where I'm having troubles 

     [broadcastTimer fire]; 
    }; 
} 

संकलक मुझे इस कह रही रखता है: Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'BOOL' (aka 'signed char')

मैं इस पर एक स्पष्टीकरण की सराहना करता हूं क्योंकि मैं एक नबस्की हूं।


अद्यतन

के रूप में आप में से कई ने बताया है, मैं जाहिरा तौर पर इसके लिए एक सूचक का उपयोग करके एक BOOL की घोषणा कोस रहा हूँ। ईमानदार होने के लिए, मुझे नहीं पता कि मैंने इसका इस्तेमाल क्यों किया, लेकिन चूंकि मैं उद्देश्य-सी के लिए नया हूं, इसलिए मैंने जो किया था उसके लिए यह काम करना चाहिए था, इसलिए यह अटक गया।

// In .h 
@interface ... { 
    BOOL initialBroadcast; 
} 

@property BOOL initialBroadcast; 

// In .m 
@synthesize initialBroadcast; 

तो सही रास्ते पर अब, मैं कर रहा हूँ:

वैसे भी, मैं के बाद से करने के लिए घोषणा बदल गया है?

+0

'प्रारंभिक ब्रॉडकास्ट' कैसे घोषित किया गया है? – Rengers

+6

आपको 'BOOL' के लिए पॉइंटर की आवश्यकता क्यों है? – BoltClock

+0

क्योंकि मैंने अन्य उदाहरणों में यही देखा है, इसलिए मैं इसके साथ गया और ऐसा लगता है कि यह काम करता है। आखिरकार मुझे अपने ऐप प्रतिनिधि में 'BOOL' चर की आवश्यकता है कि मैं जांच सकता हूं कि ऐप ने डिवाइस के स्थान का प्रारंभिक प्रसारण किया था या नहीं। – Gup3rSuR4c

उत्तर

54

आप कहने के लिए

*initialBroadcast = YES; 

initialBroadcast स्मृति पता उर्फ ​​एक सूचक है की जरूरत है। * पॉइंटर धारण करने वाले मेमोरी पते पर मान तक पहुंच प्रदान करता है। तो प्रारंभिक ब्रॉडकास्ट एक स्मृति पता है, लेकिन * प्रारंभिक ब्रॉडकास्ट एक बूलियन या चार है।

+0

धन्यवाद, यह काम किया। मुझे कहना होगा, उद्देश्य-सी मेरे लिए एक सीधी सीखने की वक्र रहा है, और यह जटिलता के कारण भी नहीं है, लेकिन बहुत ही सरल लेकिन सूक्ष्म चीजें ... – Gup3rSuR4c

+1

यह गलत है। यह एक सूचक प्रकार नहीं होना चाहिए और, अधिक से अधिक संभावना नहीं है, वह कोड क्रैश होने जा रहा है क्योंकि ओपी कहीं भी भंडारण के लिए स्मृति को malloc नहीं करता है। – bbum

+0

यह कोड में घोषित नहीं किया गया था, लेकिन संकलक त्रुटि से पता चलता है कि यह वास्तव में एक सूचक चर है। यह सच है कि इसे ढेर या ढेर पर वैध स्मृति को इंगित करने की आवश्यकता है। – DavidMFrey

3

हो सकता है कि आप

*initialBroadcast = YES; // Where I'm having troubles 

लाइन लिखना चाहिए से पहले देखने के लिए एक मानक की जांच होने लगते हैं कि सूचक मान्य है (नहीं के बराबर)

+0

तो, क्या इसका मतलब यह है कि 'अगर (! प्रारंभिक ब्रॉडकास्ट) '' '' के बजाय 'शून्य' के लिए जांच करता है? चूंकि मैं सी # से आ रहा हूं, मैं सिर्फ यह देखना चाहता हूं कि 'प्रारंभिक ब्रॉडकास्ट' 'NO' है, तो क्या यह सही है या गलत है? – Gup3rSuR4c

+0

आप सही हैं। सोच नहीं रहा था। प्रारंभिक ब्रॉडकास्ट शून्य नहीं है यह जांचने के लिए 'if (प्रारंभिक ब्रॉडकास्ट) होना चाहिए था। अब ऐसा लगता है कि प्रारंभिक ब्रॉडकास्ट शून्य होना चाहिए (शून्य या नहीं के समान)। जो '* प्रारंभिक ब्रॉडकास्ट = हाँ;' खतरनाक और विभाजन विभाजन का कारण बनता है। – epatel

+0

यह जांचने के लिए कि क्या यह नहीं है, आपको 'अगर (* प्रारंभिक ब्रॉडकास्ट == नहीं) '(स्पष्ट होना) लिखना चाहिए, लेकिन यह खतरनाक है, जब तक कि आप सुनिश्चित न हों कि सूचक सही है। – epatel

7

बदलें -

initialBroadcast = YES; 

(*initialBroadcast) = YES; 

चूंकि, आप पॉइंटर पॉइंट्स (मानते हैं कि इसे प्रारंभ किया गया है) के स्थान पर मान निर्दिष्ट कर रहे हैं, initialBroadCastपहले अव्यवस्थित होना चाहिए।

56

समस्या असाइनमेंट नहीं है, यह अधिक संभावना है कि आपने अपना इंस्टेंस वैरिएबल BOOL *initialBroadcast; घोषित किया है।

इंस्टेंस वैरिएबल को पॉइंटर होने की घोषणा करने का कोई कारण नहीं है (कम से कम तब तक जब तक आपको वास्तव में बूल की सी सरणी की आवश्यकता न हो) .. घोषणा से * हटाएं।

साथ ही, यह आपके वर्तमान में गलत() परीक्षण को ठीक करेगा। जैसा कि है, यह जांचने के लिए जांच कर रहा है कि सूचक निर्धारित है या नहीं।

+1

+1 अगर मैं कर सकता था तो मैं इसे स्वीकार किए गए उत्तर पर वोट दूंगा;) –

+0

उदाहरण चर को पॉइंटर ---- एक्सकोड 4.4 में इतना सही नहीं है, आप कुछ नया उपयोग कर सकते हैं इस तरह की विशेषताएं: '- (शून्य) enumerateObjectsUsingBlock: (शून्य (^) (आईडी obj, NSUInteger idx, BOOL * stop)) ब्लॉक' यह 'BOOL' प्रकार पर एक सूचक का उपयोग करता है। – Chris

+0

निश्चित रूप से, @ क्रिस, लेकिन इसका ओपी के सवाल से कोई लेना देना नहीं है। यह एक ब्लॉक के लिए एक पैरामीटर है और किसी भी आवृत्ति चर के साथ कोई संबंध नहीं है। – bbum

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