应用程序崩溃,错误无法识别的选择器发送到实例

时间:2013-12-21 01:01:22

标签: ios objective-c unrecognized-selector

我有一个无法识别的选择器发送到实例问题。我知道哪条线路有问题,但我不明白为什么它不能识别它。 (我在创建容器视图时测试了这段代码,它运行得很好。但是出于某种原因,当我将它合并到我的主项目时,我收到了这个错误。)

这是我的控制台输出:

2013-12-20 16:47:59.633[8545:70b] -[UIViewController decideViewController:]: unrecognized selector sent to instance 0x8b5c250
2013-12-20 16:47:59.659[8545:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController decideViewController:]: unrecognized selector sent to instance 0x8b5c250'
*** First throw call stack:
(
    0   CoreFoundation                      0x01c075e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x0198a8b6 objc_exception_throw + 44
    2   CoreFoundation                      0x01ca4903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x01bf790b ___forwarding___ + 1019
    4   CoreFoundation                      0x01bf74ee _CF_forwarding_prep_0 + 14
    5   TProduct                          0x0000566f -[GameViewController changeViews:] + 143
    6   TProduct                          0x00005404 -[GameViewController timerTick:] + 532
    7   Foundation                          0x015c1927 __NSFireTimer + 97
    8   CoreFoundation                      0x01bc5bd6 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
    9   CoreFoundation                      0x01bc55bd __CFRunLoopDoTimer + 1181
    10  CoreFoundation                      0x01bad628 __CFRunLoopRun + 1816
    11  CoreFoundation                      0x01bacac3 CFRunLoopRunSpecific + 467
    12  CoreFoundation                      0x01bac8db CFRunLoopRunInMode + 123
    13  GraphicsServices                    0x0387b9e2 GSEventRunModal + 192
    14  GraphicsServices                    0x0387b809 GSEventRun + 104
    15  UIKit                               0x006f8d3b UIApplicationMain + 1225
    16  TProduct                          0x000070fd main + 141
    17  libdyld.dylib                       0x0224570d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

这是它无法识别的部分 GameViewController.m

-(void)changeViews:(NSString *)gameStateSegueIdentifier
{
    NSLog(@"show view gameStateSegueIdentifier :%@",gameStateSegueIdentifier);
    [self.containerController decideViewController:gameStateSegueIdentifier];
}

这是我打电话的方法 ContainerViewController.m

-(void)decideViewController:(NSString *)gameStateSegueIdentifier
{
    if (gameStateSegueIdentifier == _currentSegueIdentifier) {
        return;
    }

    while (gameStateSegueIdentifier != _currentSegueIdentifier) {
        NSLog(@"this is the gameStateSegueIdentifier %@",gameStateSegueIdentifier);
        NSLog(@"this is the currentSegueIdentifier %@",_currentSegueIdentifier);

        [self changeViewControllers];
    }
}

我知道有很多“无法识别的选择器发送到实例”问题已经存在。但到目前为止,我无法找到答案。我很感激帮助。

2 个答案:

答案 0 :(得分:1)

您收到的错误消息说明了问题:

2013-12-20 16:47:59.633[8545:70b] -[UIViewController decideViewController:]: unrecognized selector sent to instance 0x8b5c250

这告诉您类UIViewController的实例收到了消息decideViewController:。 UIViewController不响应此消息。因此,self.containerController似乎是UIViewController而不是ContainerViewController。 (如果它是ContainerViewController,它会在错误消息中这样说。)

该属性声明为ContainerViewController这一事实并不意味着其中实际存在ContainerViewController。转到实际创建此对象的位置并将其分配给该属性,并确保将其创建为正确的类。

答案 1 :(得分:0)

当无法识别选择器时,您不需要显示选择器的代码,因为它不会被执行。

显示containerController的属性行。

  1. 您是否100%确定self.containerController是一个ContainerViewController,您的错误消息显示UIViewController,所以您正在做一些像群集或类别这样的特殊事情?

  2. 您使用的是#import“ContainerViewController”吗?

  3. @implementation @end部分中的方法是什么?