क्या [anObject performSelector] को कॉल करने का कोई तरीका है; 2 से अधिक वस्तुओं के साथ? मुझे पता है कि आप कई तर्कों को पारित करने के लिए एक सरणी का उपयोग कर सकते हैं, लेकिन मैं सोच रहा था कि फ़ंक्शन को कॉल करने के लिए निम्न स्तर का तरीका था, मैंने पहले से ही तर्कों के एक nsarray के साथ एक सहायक फ़ंक्शन का उपयोग किए बिना 2 तर्कों के साथ परिभाषित किया है।प्रदर्शन 2 से अधिक वस्तुओं के साथ चयनकर्ता
उत्तर
या तो (1) NSInvocation या (2) का उपयोग सीधे objc_msgSend
का उपयोग करें।
objc_msgSend(target, @selector(action:::), arg1, arg2, arg3);
(नोट: सुनिश्चित करें सभी तर्कों id
के हैं, अन्यथा तर्क को सही ढंग से नहीं भेजा जा सकता है बनाते हैं।)
आप NSObject
वर्ग इस तरह का विस्तार कर सकते हैं:
- (id) performSelector: (SEL) selector withObject: (id) p1
withObject: (id) p2 withObject: (id) p3
{
NSMethodSignature *sig = [self methodSignatureForSelector:selector];
if (!sig)
return nil;
NSInvocation* invo = [NSInvocation invocationWithMethodSignature:sig];
[invo setTarget:self];
[invo setSelector:selector];
[invo setArgument:&p1 atIndex:2];
[invo setArgument:&p2 atIndex:3];
[invo setArgument:&p3 atIndex:4];
[invo invoke];
if (sig.methodReturnLength) {
id anObject;
[invo getReturnValue:&anObject];
return anObject;
}
return nil;
}
(थ्री 20 प्रोजेक्ट से NSObjectAdditions देखें।) फिर आप उपरोक्त विधि को varargs और तर्कों के शून्य-समाप्त सरणी का उपयोग करने के लिए भी बढ़ा सकते हैं, लेकिन यह अधिक है।
एक अतिरिक्त विकल्प, जब आपको performSelector
के साथ एकाधिक ऑब्जेक्ट भेजने की आवश्यकता होती है तो एक अतिरिक्त विकल्प है (यदि यह करने में आसान है) तो आप जिस पैरामीटर को कॉल करना चाहते हैं उसे NSDictionary
ऑब्जेक्ट को एकाधिक पैरामीटर के बजाय ले जाने के लिए कॉल करना चाहते हैं, क्योंकि आप सक्षम होंगे आपको शब्दकोश के भीतर जितना चाहें उतना भेजने के लिए।
उदाहरण
के लिए मैं एक विधि यह जो 3 तर्क था के समान था और मैं इसे performSelector से कॉल करने के लिए की जरूरत -
-(void)getAllDetailsForObjectId:(NSString*)objId segment:(Segment*)segment inContext:(NSManagedObjectContext*)context{
मैं एक शब्दकोश का उपयोग स्टोर करने के लिए बनाने के लिए इस पद्धति को बदल कर तर्क
-(void)getAllDetailsForObject:(NSDictionary*)details{
इसलिए मैं विधि आसानी से
फोन करने में सक्षम था 10[self performSelector:@selector(getAllDetailsForObject:) withObject:@{Your info stored within a dictionary}];
सोचा कि मैं इसे वैकल्पिक विकल्प के रूप में साझा करना चाहूंगा क्योंकि यह मेरे लिए काम करता है।
चीयर्स
- 1. 2 पैरामीटर के साथ चयनकर्ता
- 2. आईडी चयनकर्ता से तत्व चयनकर्ता अधिक विशिष्ट कैसे है?
- 3. jQuery - 2 छद्म चयनकर्ता?
- 4. प्रदर्शन चयनकर्ता मोनोटच थ्रेडिंग
- 5. एक ही आईडी के साथ स्मृति में अधिक वस्तुओं?
- 6. 2 से अधिक टेबल के साथ बाएं जॉइन कैसे करें?
- 7. जो अधिक कुशल है - $ ('चयनकर्ता')। अंतिम() या $ ('चयनकर्ता: अंतिम')?
- 8. प्रदर्शन फ़ाइल चयनकर्ता संवाद
- 9. सिम्फनी 2 भाषा चयनकर्ता
- 10. timediff 2 मिनट से अधिक
- 11. प्रदर्शन चयनकर्ता: withObject: afterDelay: scrollViewDidZoom
- 12. प्रदर्शन अधिक से अधिक से कम एक Makefile
- 13. एसईएल प्रदर्शन चयनकर्ता और तर्क
- 14. मेमोरी लीक सिम्फनी 2 सिद्धांत 2/स्मृति सीमा से अधिक
- 15. सीएसएस चयनकर्ता प्रदर्शन, डीओएम पार्सिंग
- 16. MSSQL: एक और तालिका में अधिक से अधिक 2 घटनाओं के साथ पंक्तियों का चयन करें
- 17. एलिमेंट से चयनकर्ता चयनकर्ता और परिणाम चयनकर्ता
- 18. जावा 1 सिंक्रनाइज़ ब्लॉक 1 से अधिक वस्तुओं के लिए?
- 19. कोर डाटा प्रदर्शन: NSPredicate वस्तुओं
- 20. jQuery चयनकर्ता प्रदर्शन - एक कथन बनाम दो
- 21. सार्वभौमिक चयनकर्ता का प्रदर्शन प्रभाव क्या है?
- 22. "बताओ, नहीं पूछें" एकाधिक डोमेन से अधिक वस्तुओं
- 23. Asp.net एमवीसी 2 प्रदर्शन प्रदर्शन प्रदर्शन समस्या?
- 24. Interleaving कई (अधिक से अधिक 2) अनियमित LINQ
- 25. दो वस्तुओं के अधिक से अधिक लौटने के लिए सुरुचिपूर्ण रूबी वाक्यविन्यास
- 26. jQuery डेटा- * बनाम वर्ग चयनकर्ता - प्रदर्शन?
- 27. std :: fstream फाइलें 2 जीबी से अधिक
- 28. उत्तराधिकारी की 2 से अधिक परतों के साथ उत्सुकता से पुनरावर्ती टेम्पलेट्स कैसे लिखें?
- 29. MySQL गिनती घटनाएं 2 से अधिक हैं
- 30. तुलना करें 2 JSON वस्तुओं
objc_msgSend उपयोग करते समय, आप की आवश्यकता होगी करने के लिए #import के अनुसार: http://stackoverflow.com/questions/4896510/how-to-import-nsobjcruntime-h -to-use-objc-msgsend –
कि आखिरी नोट जो आपने सुनिश्चित किया है कि सभी तर्क टाइप आईडी के हैं .. क्या आप आगे समझा सकते हैं? या कृपया कुछ संसाधन प्रदान करें? मैं कोई नहीं ढूंढ सकता। –