2009-09-29 15 views
9
(gdb) bt 
#0 0x302ac924 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___() 
#1 0x92077e3b in objc_exception_throw() 
#2 0x302d6ffb in -[NSObject doesNotRecognizeSelector:]() 
#3 0x3026e056 in ___forwarding___() 
#4 0x3024a0a2 in __forwarding_prep_0___() 
#5 0x00004ae9 in -[GameObject doesTouch:] (self=0xe893a0, _cmd=0x643ee, obj=0xe82e20) at /Users/aaa/Desktop/CPT/Game/Classes/GameObject.m:220 
#6 0x00006e05 in -[StaticGrid checkTouchNearest:] (self=0xe82f20, _cmd=0x64ec3, obj=0xe893a0) at /Users/aaa/Desktop/CPT/Game/Classes/StaticGrid.m:62 
#7 0x0000a393 in -[EAGLView touchesBegan:withEvent:] (self=0xe8dad0, _cmd=0x3199fa3c, touches=0x632c0b0, event=0xe14590) at /Users/aaa/Desktop/CPT/Game/Classes/EAGLView.m:459 
#8 0x30910f33 in -[UIWindow _sendTouchesForEvent:]() 
#9 0x308faecb in -[UIApplication sendEvent:]() 
#10 0x309013e1 in _UIApplicationHandleEvent() 
#11 0x32046375 in PurpleEventCallback() 
#12 0x30245560 in CFRunLoopRunSpecific() 
#13 0x30244628 in CFRunLoopRunInMode() 
#14 0x32044c31 in GSEventRunModal() 
#15 0x32044cf6 in GSEventRun() 
#16 0x309021ee in UIApplicationMain() 
... 

वर्तमान में मेरे पास एक दुर्लभ घटना त्रुटि है जिसे मैं अभी तक कारण नहीं जानता। मुझे यकीन नहीं है कि कहां देखना है, इसलिए मैं क्या पूछना चाहता हूं पहली पांच पंक्तियां (# 0 से # 4) का क्या अर्थ है? मुझे पता है कि यह दावा करता है कि कुछ त्रुटियां हैं, लेकिन "___forwarding___" जैसी चीज़ें क्या हैं?स्टैक ट्रेस में __forwarding__ का क्या अर्थ है?

यदि आपके पास इसमें कुछ ज्ञान है, तो कृपया मदद करें। आपका बहुत बहुत धन्यवाद।

उत्तर

20

अग्रेषण सामग्री uhm ... अग्रेषण संदेशों के लिए उपयोग की जाती है। प्रत्येक ऑब्जेक्ट कुछ अन्य ऑब्जेक्ट्स को प्राप्त संदेशों को आसानी से अग्रेषित कर सकता है, उत्कृष्ट tutorial by Scott Stevenson देखें। जब आपके GameObject को एक संदेश प्राप्त होता है जो समझ में नहीं आता है, तो यह इसे अग्रेषित करने का प्रयास करता है। अगर कोई अग्रेषण लागू नहीं किया गया है, तो doesNotRecognizeSelector विधि कहा जाता है और आपको अपवाद मिलता है।

विस्तृत विवरण NSObject वर्ग के लिए Apple documentation में पाया जा सकता:

एक वस्तु जो यह कोई इसी विधि है के लिए एक संदेश भेजा जाता है, क्रम प्रणाली रिसीवर करने का अवसर देता संदेश को दूसरे रिसीवर को प्रतिनिधि दें। संदेश युक्त तर्क के रूप में इस NSInvocation वस्तु: यह एक NSInvocation वस्तु संदेश और रिसीवर भेजने एक forwardInvocation का प्रतिनिधित्व बनाकर प्रतिनिधियों संदेश। रिसीवर का आगे इन्वोकेशन: विधि संदेश को पर किसी अन्य ऑब्जेक्ट को अग्रेषित करने का विकल्प चुन सकती है। (...) एनएसओब्जेक्ट का का कार्यान्वयन आगे बढ़ाना: बस करता है नोट नहीं पहचानता चयनकर्ता: विधि; यह किसी भी संदेश को अग्रेषित नहीं करता है। इस प्रकार, यदि आप को आगे बढ़ाने के लिए लागू नहीं करना चाहते हैं: ऑब्जेक्ट्स को अपरिचित संदेश अपवाद उठाएंगे।

आपकी त्रुटि के लिए, ऐसा लगता है कि GameObject कुछ संदेश भेज दिया गया है जो इसे समझ में नहीं आता है। यह एक साधारण टाइपो या स्मृति प्रबंधन त्रुटि जैसी कुछ सूक्ष्म हो सकती है, आपको हमें और जानकारी देना होगा।

+4

+1 अच्छा जवाब। मैं यह जोड़ना चाहता हूं कि यह उद्देश्य-सी की एक गतिशील प्रोग्रामिंग भाषा है, जहां विधियों को संकलित समय पर हल नहीं किया जाता है। यह लेखन कोड जो उन विधियों को कॉल करता है जो मौजूद नहीं हैं, एक त्रुटि प्रति-सी नहीं है, रन-टाइम में आपका एप्लिकेशन हल करने के लिए हल कर सकता है, प्रॉक्सी लिखने के लिए बहुत आसान है। – PeyloW

2

पहली बात यह है कि मैं जांचूंगा कि गेमऑब्जेक्ट में एक-डोज़ टच है: या + टच टच: विधि। मुझे यकीन नहीं है कि __forwarding ... क्या है। कंसोल लॉग में आप क्या त्रुटि संदेश देखते हैं?

+0

क्या स्टैक ट्रेस इंगित नहीं करता है कि 'DoTouch' अपरिचित संदेश होने के बजाय, यूरेक्जनाइज्ड संदेश भेज रहा है? – outis

+0

- [GameObject doesTouch:] वास्तव में एक अपरिचित विधि भेज रहा है। यह बताने का कोई तरीका नहीं है कि यह स्टैक ट्रेस से क्या है, लेकिन अपवाद फेंकने पर यह लॉग हो जाएगा, इसलिए इसे एक्सकोड कंसोल में दिखाई देना चाहिए। अधिक जानकारी प्राप्त करने के लिए, अपवाद को पकड़ें या objc_exception_throw में एक ब्रेकपॉइंट सेट करें (रन-> शो-> ब्रेकपॉइंट्स-> प्रतीक के लिए डबल-क्लिक करें, objc_exception_throw टाइप करें, फिर रन-> डीबग)। –

संबंधित मुद्दे