2010-09-27 9 views
12

क्या कोई तरीका है जिसके द्वारा मैं एक आईडी प्रकार को एनएसएसटींग ऑब्जेक्ट में बदल सकता हूं? मेरे कोड की निम्न पंक्ति नोट करें।आईडी प्रकार से एनएसएसटींग

NSString *value = [appDelegate.bird_arr objectAtIndex:rowClicked] ; 

इस AppDelegate में एक नेविगेशन आधारित कार्यक्रम में मेरे AppDelegate वर्ग की वस्तु है और bird_arr NSMutableArray की वस्तु है। मैं पंक्ति में लिखी गई स्ट्रिंग का उपयोग करना चाहता हूं जिसे क्लिक किया गया है। लेकिन objectAtIndex: आईडी प्रकार देता है। क्या हमारे पास इस आईडी प्रकार को एनएसएसटींग या किसी अन्य तरीके से बदलने का कोई तरीका है जिसके द्वारा मैं विशिष्ट पंक्ति के अंदर स्ट्रिंग एकत्र कर सकता हूं?

उत्तर

20

हां, बस इसे

NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked]; 

डाली दोबारा जांचना कि यह वास्तव में एक NSString

[someId isKindOfClass:[NSString class]] 
+5

कोई भी कलाकार डालने की आवश्यकता नहीं है - एक 'आईडी' एक सामान्य वस्तु है, और इसलिए किसी भी प्रकार के पॉइंटर को असाइन किया जा सकता है। – mipadi

5

एक id का उपयोग एक सूचक किसी भी वस्तु हो सकता है चाहते हैं, और यह पदोन्नत हो जाएगी किसी ऑब्जेक्ट पॉइंटर प्रकार को स्वचालित रूप से (सी में void * की तरह)। जो कोड आप दिखाते हैं वह सही दिखता है। एक स्पष्ट कलाकार की कोई आवश्यकता नहीं है, हालांकि यदि आप वास्तव में चाहते हैं तो आप एक जोड़ सकते हैं।

यदि आप जिस ऑब्जेक्ट को सरणी से बाहर कर रहे हैं, वास्तव में NSString नहीं है, तो आपको इच्छित ऑब्जेक्ट प्राप्त करने के लिए आपको कुछ और काम करना होगा।

0

यह सोचते हैं कि वस्तु है एक NSString, NSString * करने के लिए कास्टिंग ठीक काम करना चाहिए:

NSString* value = (NSString*)[appDelegate.bird_arr objectAtIndex:rowClicked]; 
1

"id प्रकार" बस हमें वापसी मान बताता है एक वस्तु है - कि परे कुछ भी नहीं। यह पहले से ही एक एनएसएसटींग ऑब्जेक्ट हो सकता है, या यह कुछ और हो सकता है। यदि इस सरणी में सभी ऑब्जेक्ट स्ट्रिंग हैं, तो आपका काम पूरा हो गया है। अगर वे कुछ और हैं, तो आपको स्ट्रिंग में कुछ और पाने के लिए कुछ रास्ता चाहिए।

0

कास्टिंग सुरक्षित तरफ होने के लिए किया जा सकता है लेकिन इसकी आवश्यकता नहीं है। मैंने दोनों चीजों के बाद और कास्टिंग के बिना कोड को ठीक करने की कोशिश की और चीजें ठीक काम करती थीं। आईडी संदर्भ रखता है और रनटाइम पर किस प्रकार का संदर्भ किया जाता है, मुझे लगता है। हालांकि मुझे स्ट्रिंग प्रारूप में एक विशिष्ट पंक्ति पर टेक्स्ट प्राप्त करने का एक और बेहतर तरीका मिला। मैंने सेलफोररोएट इंडेक्स का उपयोग करके किया: इंडेक्स विधि। यह मुझे निर्दिष्ट सूचकांक पर सेल वापस कर देगा, फिर टेक्स्ट लेबल संपत्ति का उपयोग करेगा। आपके उत्तर के लिए Thanx और दोस्तों की मदद करें।