में गुणों के रूप में enum प्रकारों का उपयोग करना मैं एक अनुभवी .NET डेवलपर उद्देश्य सी प्रोग्रामिंग में अपना पहला प्रयास कर रहा हूं। मुझे एक enum प्रकार की संपत्ति के साथ कठिनाई हो रही है।उद्देश्य सी
typedef enum {
Open,
Unavailable,
Unknown
} LocationStatus;
@interface Location : NSObject {
LocationStatus status;
}
@property (nonatomic) LocationStatus status;
@end
और एक कार्यान्वयन है कि इस तरह दिखता है:: कुछ संदर्भ ... मैं एक वर्ग शीर्षक और enum इस तरह है
@implementation Location
@synthesize status;
@end
कोड में कुछ बिंदु पर, मैं मान सेट कर रहा हूँ इस तरह:
location1.status = Open;
डिबगर तो सही मान होने के रूप में यह मूल्यांकन करता है, और यह सही enum को हल करने है (ध्यान दें भी अन्य संपत्तियों के यहाँ नहीं दिखाया देखते हैं कि ... वे भी ठीक से मूल्यांकन)।
बाद कोड में पर, मैं इस तरह है कि संपत्ति को पढ़ने के लिए प्रयास: कोड में इस बिंदु पर
LocationStatus status = location.status;
, डिबगर Status
को छोड़कर, सही ढंग से मेरी कक्षा के सभी गुण का मूल्यांकन करने में सक्षम है, जो एक स्मृति पता दिखाता है, लेकिन वास्तविक मूल्य नहीं। जब निष्पादन इस पंक्ति तक पहुंचता है, तो मुझे लगातार कंसोल में EXC_BAD_ACCESS त्रुटि मिलती है, और ऐप क्रैश हो जाता है।
मुझे पूरा यकीन है कि यह उद्देश्य सी (और संभवतः सामान्य रूप से सी) में गुणों और enums का उपयोग करने के तरीके पर मेरे हिस्से पर एक मौलिक गलतफहमी को दर्शाता है। अगर कोई इस पर कुछ प्रकाश डाल सकता है, तो मैं सबसे आभारी हूं।
यह मेरा पहला विचार था ... कि मैं कहीं भी मूल्य जारी कर दूंगा। मुझे भ्रमित करने वाला यह है कि कोड की एक खोज से पता चलता है कि पूरे कोडबेस में केवल एक ही स्थान है कि इस संपत्ति को एक मूल्य दिया गया है, और ब्रेकपॉइंट डालने से यह साबित होता है कि यह असाइनमेंट केवल एक बार हो रहा है।इसके अतिरिक्त, क्योंकि स्थानस्टैटस एक enum है, मुझे इसे आवंटित करने की आवश्यकता नहीं है, जिसका अर्थ है कि मैं यह निर्दिष्ट नहीं कर सकता कि यह कैसे जारी किया गया है (मैं यहां गलत होने के लिए पूरी तरह से खुला हूं, आपको याद है)। तो इसे जल्दी कैसे जारी किया जा सकता है और मैं इसे कैसे रोक सकता हूं? क्या एनम मूल्यों को आवंटित करने का कोई बेहतर तरीका है? –
मेरा पहला विचार यह होगा कि जो चीज समाप्त हो चुकी है वह उस असाइनमेंट में आपके स्थान चर की सामग्री है। लेकिन लाश चालू करें, और आप निश्चित रूप से देख सकते हैं! –