से ऑब्जेक्टिव सी विधि को कॉल करने में असमर्थ मैं एक जीयूआई अनुप्रयोग के लिए एमवीसी आर्किटेक्चर का उपयोग कर रहा हूं। मॉडल क्लास में कुछ सी फ़ंक्शन हैं। सी कार्यों में से एक उद्देश्य-सी वर्ग के कुछ तरीकों को बुलाता है। मैं उस वर्ग की वस्तु का उपयोग करके उन तरीकों को बुलाता हूं। अजीब चीज यह है कि पहले xyz विधि के तरीकों को पूरी तरह से कहा जाता है, लेकिन जब उस xyz विधि को कहा जाता है, तो उस विधि और विधियों को निष्पादित नहीं किया जा रहा है। मुझे कोई त्रुटि नहीं मिलती है। तो यह पता नहीं लगा सकता कि वास्तव में क्या हो रहा है। इस बारे में कोई विचार क्या है कि इसका क्या कारण हो सकता है?सी फंक्शन
उत्तर
आप निश्चित रूप से सी फ़ंक्शन से Obj-C ऑब्जेक्ट्स पर विधियों को चला सकते हैं, इसलिए संभव है कि किसी बिंदु पर आपके कोड में कोई त्रुटि हो। अगर मुझे लगता है, ऐसा लगता है कि एक ऑब्जेक्ट शून्य है जब आप इसकी उम्मीद नहीं करते हैं। आम तौर पर आप अपने फ़ंक्शन में ब्रेकपॉइंट्स सेट करके शुरू करेंगे, ताकि आप यह पता लगा सकें कि स्थिति में वस्तुएं क्या हैं।
जैसा कि मार्क बताता है, आप शायद ओबीजेसी ऑब्जेक्ट के संदर्भ का उपयोग कर रहे हैं जो उद्देश्य-सी दायरे के बाहर अन-प्रारंभिक है।
यहाँ सी कोड एक ObjC वस्तु की विधि बुला के एक कार्य नमूना है: xyz से पहले विधि पर
#import <Cocoa/Cocoa.h>
id refToSelf;
@interface SomeClass: NSObject
@end
@implementation SomeClass
- (void) doNothing
{
NSLog(@"Doing nothing");
}
@end
int otherCfunction()
{
[refToSelf doNothing];
}
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SomeClass * t = [[SomeClass alloc] init];
refToSelf = t;
otherCfunction();
[pool release];
}
दोस्त बहुत उपयोगी हो सकता है, आप रॉक करते हैं। मैंने इस पर एक अच्छा दिन बर्बाद कर दिया और आपका कोड सिर्फ एक अन्यथा क्रोधित दिन बचा गया। काश मैं आपको 100 बार बार बढ़ा सकता हूं। – eviljack
मुझसे एक और 100 अपवॉट्स! यह अविश्वसनीय रूप से सहायक था। – willc2
बीटीडब्ल्यू यह केवल एक सिंगलटन के लिए काम करेगा। यदि आप एक से अधिक ऑब्जेक्ट को तुरंत चालू करते हैं जो reftooelf सूचक केवल अंतिम वस्तु को इंगित करेगा। – Brian
ब्रेकप्वाइंट, और फिर डीबगर में एकल स्टेपिंग शुरू करते हैं। यह आश्चर्यजनक है कि आप डीबगर में कोड के माध्यम से एकल कदम से कितनी बग स्पॉट कर सकते हैं। असल में, यह वास्तव में आपके द्वारा लिखे गए किसी भी नए कोड के कोड के माध्यम से कोड के माध्यम से एक चरण के लिए एक अनुशंसित बग टावरेंस तकनीक है।
मैं मार्क के साथ सहमत हूं, "उस विधि का क्लासिक कारण और इसे निष्पादित नहीं होने के बाद के तरीके" यह है कि ऑब्जेक्ट संदर्भ शून्य है, क्योंकि [nil doAnything] कुछ भी नहीं करेगा और कोई त्रुटि रिपोर्ट नहीं करेगा।
ऐसा करने के लिए एक आसान तरीका है: स्वयं के साथ init
@implementation
// Define a object
ClassName *thisClass;
और फिर
thisClass = self;
आप सी-विधि में किसी भी वर और तरीकों का उपयोग कर सकते
- 1. फंक्शन सी
- 2. सी फंक्शन
- 3. सी ++ में फंक्शन हुकिंग?
- 4. सी ++ फंक्शन प्रकार?
- 5. सी में फंक्शन?
- 6. सी ++ 11 लम्बाडा फंक्शन पॉइंटर
- 7. फंक्शन पॉइंटर्स
- 8. इनलाइन फंक्शन
- 9. Cython: इनलाइन फंक्शन नहीं शुद्ध सी
- 10. सी ++/सीएलआई प्रतिनिधि फंक्शन पॉइंटर (System.AccessViolationException)
- 11. सी चेतावनी फंक्शन 'निकास' की निहित घोषणा
- 12. एक फंक्शन में सी सूचक असाइनमेंट
- 13. सी ++ सदस्य फंक्शन के लिए कॉल पॉइंटर
- 14. सी ++ फंक्शन कॉल या कंस्ट्रक्टर कॉल
- 15. जावास्क्रिप्ट फंक्शन
- 16. फंक्शन "सामान्य"
- 17. एक फंक्शन
- 18. एसक्यूएल कुल फंक्शन
- 19. ओपनसीवी सीक फंक्शन/रिवाइंड
- 20. सी सी फंक्शन एक्सप्रेशन का समर्थन करता है?
- 21. सी ++ पासिंग पॉइंटर टू फंक्शन (हाउटो) + सी ++ पॉइंटर मैनिपुलेशन
- 22. फंक्शन पॉइंटर __attribute __ ((कॉन्स)) फ़ंक्शन?
- 23. स्काला में विशेषता, फंक्शन एन, या विशेषता-विरासत-फंक्शन एन?
- 24. फंक्शन डिफ़ॉल्ट तर्क और शीर्षलेख
- 25. एफ # ऑपरेटर/फंक्शन भ्रम
- 26. फंक्शन तर्क कई प्रकार
- 27. पीएल/एसक्यूएल फंक्शन मान
- 28. डेल्फी: कोई VarIsBoolean() -फंक्शन?
- 29. एक कस्टम हैश फंक्शन
- 30. लोकैलिटी संरक्षण हैश फंक्शन
आप कुछ कोड पोस्ट कर सकते हैं ? अन्यथा मदद करना असंभव होगा। –
मैं अनुरोध करता हूं कि दूसरा। कुछ सरल कोड बहुत उपयोगी होंगे। जैसे सी फ़ंक्शन का केवल कुछ कोड दिखाता है कि आप वास्तव में obj-c ऑब्जेक्ट को कैसे एक्सेस करते हैं और आप इसे कॉल कैसे करते हैं, – Mecki