开发者

'+[NSInvocation invocationWithMethodSignature:]: method signature argument cannot be nil' (Cocos2D)

Xcode 3.2.5, iOS 4.2 (Simulator), Cocos2D 0.99.5

Following this tutorial comes with a wonderful crash, as seen below.

I haven't found a single (directly) relevant thing through Google on any site. The closest I got was something else on this site with the same error, but a completely different reason. (I assume so, anyway. But then, given that 0.99.5 comes with two Analyzer results, it could just be a bad release…)

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSInvocation invocationWithMethodSignature:]: method signature argument cannot be nil'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x013cbbe9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x015205c2 objc_exception_throw + 47
    2   CoreFoundation                      0x0133bb09 +[NSInvocation invocationWithMethodSignature:] + 553
    3   FirstGame                           0x0005ddd4 -[CCMenuItem initWithTarget:selector:] + 308
    4   FirstGame                           0x0005e528 -[CCMenuItemLabel initWithLabel:target:selector:] + 104
    5   FirstGame  开发者_开发问答                         0x0005fb1d -[CCMenuItemFont initFromString:target:selector:] + 365
    6   FirstGame                           0x0005f8db +[CCMenuItemFont itemFromString:target:selector:] + 123
    7   FirstGame                           0x00003457 -[HelloWorld init] + 231
    8   FirstGame                           0x00063db1 +[CCNode node] + 81
    9   FirstGame                           0x0000332d +[HelloWorld scene] + 93
    10  FirstGame                           0x00002dbc -[FirstGameAppDelegate applicationDidFinishLaunching:] + 1212
    11  UIKit                               0x0085a253 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1252
    12  UIKit                               0x0085c55e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439
    13  UIKit                               0x00866db2 -[UIApplication handleEvent:withNewEvent:] + 1533
    14  UIKit                               0x0085f202 -[UIApplication sendEvent:] + 71
    15  UIKit                               0x00864732 _UIApplicationHandleEvent + 7576
    16  GraphicsServices                    0x02973a36 PurpleEventCallback + 1550
    17  CoreFoundation                      0x013ad064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    18  CoreFoundation                      0x0130d6f7 __CFRunLoopDoSource1 + 215
    19  CoreFoundation                      0x0130a983 __CFRunLoopRun + 979
    20  CoreFoundation                      0x0130a240 CFRunLoopRunSpecific + 208
    21  CoreFoundation                      0x0130a161 CFRunLoopRunInMode + 97
    22  UIKit                               0x0085bfa8 -[UIApplication _run] + 636
    23  UIKit                               0x0086842e UIApplicationMain + 1160
    24  FirstGame                           0x000028a4 main + 100
    25  FirstGame                           0x00002835 start + 53
)

I can't come up with anything. Maybe someone else has seen this before?


I had the same error due to my poor knowledge of selectors in Objective-C. I initially implemented the goToGameplay method with the signature:

-(void)goToGameplay;

instead i had to use:

-(void)goToGameplay:(id)sender;

This works with the call:

@selector(goToGameplay:)

Hope i helps.


Specifically, it looks like this call?

CCMenuItem *Play = [CCMenuItemFont itemFromString:@"PLAY" target:self selector:@selector(goToGameplay:)];

Have you implemented goToGameplay: on your HelloWorld class?

The way the tutorial is written, you don't write the method until later in the tutorial. Thus, if you run the tutorial in the middle and try to hit that menu item, it will crash as described above.


It looks like the selector you've passed to +[CCMenuItemFont itemFromString:target:selector:] is not implemented on your target object. Trying to look up the selector would result in a nil method signature, which would cause the error seen there.


I had the same problem. My issue was in the PauseScene.m file creating the menu items for resume and quit. In my case one of the names in the @selector part of CCMenuItem did not match the method name used later. Specifically, for me I used @selector(GotoMainMenu) but used GoToMainMenu for the method...the difference was "To" vs "to". To check, put an NSLog at the top of the init in the PauseScene.m file. If you see the message, the problem is somewhere here. If not, it's probably earlier.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜