堆栈跟踪中的__forwarding__是什么意思?

时间:2009-09-29 16:19:02

标签: objective-c cocoa stack-trace message-forwarding

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

如果您对此有所了解,请提供帮助。非常感谢你。

2 个答案:

答案 0 :(得分:20)

转发内容用于 uhm ... 转发消息。每个对象都可以轻松地将收到的消息转发给其他对象,请参阅优秀的tutorial by Scott Stevenson。当您的GameObject收到不理解的消息时,会尝试转发该消息。如果没有实现转发,则调用doesNotRecognizeSelector方法并获得异常。

详细说明可在NSObject类的Apple documentation中找到:

  

为对象发送消息时   它没有相应的方法,   运行时系统给接收器   委派信息的机会   到另一个接收器。它代表了   通过创建NSInvocation消息   表示消息的对象和   发送接收器a   forwardInvocation:包含的消息   这个NSInvocation对象为   论点。接收者的   forwardInvocation:方法可以   选择将消息转发给   另一个对象。   (......)   NSObject的实现   forwardInvocation:只需调用   doesNotRecognizeSelector:方法;它   不转发任何消息。因此,如果   你选择不实施   forwardInvocation :,发送   对象无法识别的消息   提出例外。

至于你的错误,似乎GameObject发送了一些它不理解的消息。这可能是一个简单的拼写错误或更精细的内存管理错误,你必须给我们更多的信息。

答案 1 :(得分:2)

我要检查的第一件事是GameObject是否有-doesTouch:或+ doesTouch:方法。我不确定__forwarding是什么。您在控制台日志中看到了什么错误消息?