'+ [NSInvocation invocationWithMethodSignature:]: аргумент сигнатуры метода не может быть nil' (Cocos2D) - PullRequest
2 голосов
/ 17 декабря 2010

Xcode 3.2.5, iOS 4.2 (Симулятор), Cocos2D 0.99.5

После этого урока произошел замечательный сбой, как показано ниже.

Iне нашел ни одной (непосредственно) релевантной вещи через Google ни на одном сайте.Самое близкое, что я получил, было что-то еще на этом сайте с той же ошибкой, но совершенно другой причиной.(Во всяком случае, я так полагаю. Но с учетом того, что 0.99.5 идет с двумя результатами Analyzer, это может быть просто плохой релиз ...)

*** 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
)

Я ничего не могу придумать.Может быть, кто-то еще видел это раньше?

Ответы [ 4 ]

7 голосов
/ 19 декабря 2010

У меня была такая же ошибка из-за моего плохого знания селекторов в Objective-C. Первоначально я реализовал метод goToGameplay с подписью:

-(void)goToGameplay;

вместо этого я должен был использовать:

-(void)goToGameplay:(id)sender;

Это работает с звонком:

@selector(goToGameplay:)

Надеюсь, я помогу.

6 голосов
/ 17 декабря 2010

В частности, как выглядит этот вызов?

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

Вы реализовали goToGameplay: в своем классе HelloWorld?

То, как написано руководство, вы ненаписать метод до позже в учебнике.Таким образом, если вы запустите учебник посередине и попытаетесь нажать на этот пункт меню, он потерпит крах, как описано выше.

0 голосов
/ 18 декабря 2010

У меня была такая же проблема. Моя проблема была в файле PauseScene.m создания пунктов меню для возобновления и выхода. В моем случае одно из имен в @selector части CCMenuItem не совпадало с именем метода, использованным позже. В частности, для меня я использовал @selector (GotoMainMenu), но использовал GoToMainMenu для метода ... разница была "Кому" против ". Чтобы проверить, поместите NSLog вверху инициализации в файле PauseScene.m. Если вы видите сообщение, проблема где-то здесь. Если нет, то, вероятно, раньше.

0 голосов
/ 17 декабря 2010

Похоже, что селектор, который вы передали +[CCMenuItemFont itemFromString:target:selector:], не реализован на вашем целевом объекте. Попытка поиска селектора привела бы к подписи nil метода, что привело бы к ошибке, видимой там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...