سؤال

(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___"?

إذا كان لديك بعض المعرفة في هذا، فالرجاء المساعدة. شكرا جزيلا.

هل كانت مفيدة؟

المحلول

يتم استخدام الاشياء إعادة توجيه ل uhm ... إعادة توجيه الرسائل. يمكن لكل كائن بسهولة إعادة توجيه الرسائل التي يتلقاها إلى بعض الكائنات الأخرى، راجع ممتاز البرنامج التعليمي من سكوت ستيفنسون. وبعد عندما يكون لديك GameObject يتلقى رسالة لا يفهمها، فإنه يحاول إعادة توجيهه. إذا لم يكن هناك إعادة توجيه تنفيذه، doesNotRecognizeSelector يتم استدعاء الطريقة وتحصل على الاستثناء.

وصف مفصل يمكن العثور عليه في وثائق أبل ل NSObject صف دراسي:

عند إرسال كائن رسالة لا يوجد لديه طريقة مقابلة، يمنح نظام وقت التشغيل الاستقبال فرصة لتفويض الرسالة إلى جهاز استقبال آخر. يفوض الرسالة عن طريق إنشاء كائن NSinvocation يمثل الرسالة وإرسال جهاز الاستقبال ArderInvocation: الرسالة التي تحتوي على كائن nsinvocation هذا كوسيطة. يتم توجيه إعادة توجيه الاستقبال: يمكن بعد ذلك اختيار الطريقة إعادة توجيه الرسالة إلى كائن آخر. (...) تنفيذ NSOBJECT للترابط: ما عليك سوى استدعاء الملفات الخاطئة "الطريقة؛ لا يمر أي رسائل. وبالتالي، إذا اخترت عدم تنفيذ التقدمية:، فسوف يرفع رسائل غير معروفة إلى الكائنات استثناءات.

كما هو الحال بالنسبة لك، يبدو أن GameObject يتم إرسال بعض الرسالة التي لا يفهمها. يمكن أن يكون هذا خطأ مطبعي بسيط أو شيء أكثر دقة مثل خطأ إدارة الذاكرة، فمن الضروري أن تعطينا المزيد من المعلومات.

نصائح أخرى

أول شيء أتحقق منه هو ما إذا كان gameObject لديه oestouch: أو + doestouch: الطريقة. لست متأكدا مما __ ... هو. ما هي رسالة الخطأ التي تراها في سجل وحدة التحكم؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top