दिलचस्प पोस्ट
LINQ में इकाईयों में थोक-हटाना सी # – ओएस के साथ अंतिम उपयोगकर्ता इंटरैक्शन का समय पता लगाओ ऑप्टिमाइज़ेशन सक्षम के साथ भिन्न चल बिन्दु परिणाम – संकलक बग? जावास्क्रिप्ट में सॉर्ट करना: क्या प्रत्येक फंक्शन में "रिटर्न 0" कथन है? HTML में यूनिकोड प्रतीकों को प्रदर्शित करना पूर्ण सी ++ 11 समर्थन के साथ विंडोज सी + + कंपाइलर (क्यूटी के साथ काम करना चाहिए) जावा – SQL इंजेक्शन को रोकने के लिए स्ट्रिंग से बचें अपने देशांतर और अक्षांश मान का उपयोग करके दो स्थानों के बीच दूरी की गणना कैसे करें Roslyn के साथ एक विधि के सभी संदर्भों को ढूँढना Android एप्लिकेशन को विकसित करने के लिए सबसे अच्छा आईडीई क्या है? JQuery के साथ एक चेकबॉक्स के लिए "चेक किया" सेट करना? मैं सर्वर-साइड स्क्रिप्ट का उपयोग कर एक वेबपृष्ठ का एक स्क्रीनशॉट कैसे बना सकता हूं? एक संयुक्त पाश की तुलना में अलग loops में elementwise जोड़ों में बहुत तेजी क्यों हैं? मुझे कैसे पता चलेगा कि SQL पूर्ण पाठ अनुक्रमणिका जनसंख्या समाप्त हो गया है? उपलब्ध शेयर विकल्पों के साथ डिफ़ॉल्ट आईओएस 6 शेयर एक्शन शीट कैसे प्रदर्शित करें?

NSArray पर सबस्क्रिप्ट का उपयोग करते समय कम्पाइलर त्रुटि "अपेक्षित पद्धति नहीं मिली"

मैंने NSArray लिए नया उद्देश्य-सी शाब्दिक सिंटैक्स की कोशिश करने के लिए यह सरल कोड लिखा है:

 NSArray *array = @[@"foo"]; NSLog(@"%@", array[0]); 

पहली पंक्ति ठीक काम करती है, लेकिन एक त्रुटि में सबस्क्रिप्टिंग परिणाम:

'NSArray *' प्रकार के ऑब्जेक्ट पर नहीं मिला सरणी तत्व को पढ़ने के लिए अपेक्षित विधि

बस सोच रहा था कि मैंने कुछ गलत किया है, या यदि शाब्दिक रूप से पूरी तरह से लागू नहीं किया गया है। मैं ऐप्पल एलएलवीएम 4.0 के साथ संकलित कर रहा हूं और आईओएस 5 एसडीके का इस्तेमाल कर रहा हूं।

यहाँ त्रुटि का एक स्क्रीनशॉट भी है

त्रुटि

वेब के समाधान से एकत्रित समाधान "NSArray पर सबस्क्रिप्ट का उपयोग करते समय कम्पाइलर त्रुटि "अपेक्षित पद्धति नहीं मिली""

आपको आईओएस 6 या ओएस एक्स 10.8 एसडीके के साथ कंपाइल करना होगा – अन्यथा फाउंडेशन ऑब्जेक्ट्स को शाब्दिक सिंटैक्स के सबस्क्रिप्टिंग बिट के लिए आवश्यक तरीकों की ज़रूरत नहीं है। * विशेष रूप से इस मामले में, सबस्क्रिप्टिंग को objectAtIndexedSubscript: सदस्यता की उम्मीद है objectAtIndexedSubscript: NSArray द्वारा कार्यान्वित किया गया है, और यह एक नई विधि है जो इस संकलक सुविधा के साथ बातचीत करने के लिए बनाई गई थी। नए सिंटैक्स के कुछ हिस्सों को ऑब्जेक्ट सृजन के साथ करना ठीक काम करना चाहिए, यद्यपि – मुझे विश्वास नहीं होता है कि किसी नए तरीके की आवश्यकता होती है।

http://clang.llvm.org/docs/ObjectiveCLiterals.html पर अधिक पढ़ने


* मैं इसे बोरर्डन द्वारा किए गए कुछ शोध पर आधारित करता हूं: https://stackoverflow.com/a/11407844/603977

मुझे इस उत्तर पर बहुत सारे अपवोट मिले हैं, जो मुझे वास्तव में महसूस होता है Borrrden की स्थापना पर। कृपया, अगर आपको लगता है कि मेरा जवाब एक महत्वपूर्ण विकल्प है, तो क्लिक करें और वहां भी वोट दें।

यदि आप आईओएस 6 या ओएस एक्स 10.8 को लक्षित नहीं कर रहे हैं, तो मैं यह कहना चाहूंगा कि काम करने के लिए सबस्क्रिप्टिंग अभी भी काफी आसान है। आपको बस उन सभी वर्गों के लिए आवश्यक तरीकों को जोड़ना है जिन्हें आप सदस्यता के लिए काम करना चाहते हैं, और उन विधियों को उचित तरीके से लागू कर सकते हैं। तो निम्न वर्गों में विधि जोड़ें:

- (id)objectAtIndexedSubscript: (NSUInteger)index; : - (id)objectAtIndexedSubscript: (NSUInteger)index;

NSMutableArray : - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;

NSDictionary : - (id)objectForKeyedSubscript: (id)key;

NSMutableDictionary : - (void)setObject: (id)obj forKeyedSubscript: (id)key;

यह कार्यान्वयन कक्षा के लिए उपयुक्त विधि को बुला के रूप में सरल है। उदाहरण के लिए, NSArray पर सबस्क्रिप्टिंग को कार्यान्वित करने के लिए आप केवल लागू करते हैं:

 - (id) objectAtIndexedSubscript:(NSUInteger)index{ return [self objectAtIndex:index]; } 

केवल नकारात्मक पक्ष मैं देख सकता हूं कि आपको अपने वर्ग को किसी भी वर्ग में आयात करना सुनिश्चित करना होगा जो सबस्क्रिप्टिंग का उपयोग करने का इरादा रखता है। बेशक, आप अपने प्रीफिक्स हेडर में #import को शामिल करके इस आवश्यकता को प्राप्त कर सकते हैं, आमतौर पर फ़ाइल: <appname>-Prefix.pch (धन्यवाद जोश कैसावेल को इंगित करने के लिए)

एक उल्टा है कि आप अपनी जरूरतों के अनुरूप सबस्क्रिप्टिंग विधियों को बदल सकते हैं। उदाहरण के लिए, ऐप्पल आपको सब्स्क्रिप्टिंग का उपयोग करने के लिए ऑब्जेक्ट्स को जोड़ने / निकालने की अनुमति नहीं देता, लेकिन इसे आसानी से पूरा किया जा सकता है:

  - (void) setObject:(id)obj atIndexedSubscript:(NSUInteger)index{ if (index < self.count){ if (obj) [self replaceObjectAtIndex:index withObject:obj]; else [self removeObjectAtIndex:index]; } else { [self addObject:obj]; } } 

मुझे एक ही समस्या है, लेकिन फिर यह एक कमी आईओएस संस्करण के बी / सी नहीं था .. लेकिन यह सिर्फ इसलिए कि मूल सरणी NSArray बजाय एक NSArray रूप में सेट किया गया था। इसे बदलने के लिए NSMutableArray यह मेरे लिए तय

मुझे इस लिंक से निम्न कोड मिला है:

आप केवल इस श्रेणी को NSObject को जोड़ सकते हैं और संग्रह सबस्क्रिप्टिंग काम करेंगे। मैं इसे मेरी .pch फ़ाइल में डाल दिया

 // Add support for subscripting to the iOS 5 SDK. #if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000 @interface NSObject (SubscriptingSupport) - (id)objectAtIndexedSubscript:(NSUInteger)idx; - (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx; - (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key; - (id)objectForKeyedSubscript:(id)key; @end #endif 

निश्चित रूप से आपको नवीनतम संस्करण की आवश्यकता होगी जो पहले से ही XCode 4.4 में है।

मैं इसे जोड़ रहा हूँ क्योंकि यह एक सामान्य त्रुटि है जो अभी भी 7/2015 के अनुसार Xcode में मौजूद है और यह पता लगाने में आसान नहीं है कि इसे कैसे हल करें।

ऑब्जेक्ट का एक उदाहरण बनाया बिना किसी ऑब्जेक्ट पर किसी विधि को कॉल करने का प्रयास करते समय मुझे यह त्रुटि मिली। मेरा समाधान ऑब्जेक्ट का एक उदाहरण बनाना था, फिर उस ऑब्जेक्ट के उदाहरण पर संपत्ति पर विधि को कॉल करें।

उदाहरण: क्या काम नहीं किया: [स्व-विधि कॉल: सरणीइटम] (नीचे पूर्ण उदाहरण देखें)

 [self tappedUser:self.activities[indexPath.row].followItem.user.givenName]; 

क्या तय है: ObjectClass newObject = arrayItem; [आत्म विधि कॉल: नया ऑब्जेक्ट] (नीचे पूर्ण उदाहरण देखें)

 FollowActivityItem *followItem = self.activities[indexPath.row]; [self tappedUser:followItem.user.givenName]; 

अपने एच फ़ाइल में #import <Foundation/Foundation.h> को जोड़ें, और इसके बजाय एक NSMutableArray उपयोग करें