首页 > 其他 > 详细

Cocoa惯性思维调试一例

时间:2016-02-13 17:08:09      阅读:153      评论:0      收藏:0      [点我收藏+]

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


人总有惯性思维,在编程调试里也不例外.你总以为错误是显然的那一个,可是结果却不是.

在stroyboard中建立2个UIView控制器,如果按下第一个控制其中的reg按钮则会显示第二个控制器视图:

- (IBAction)reg:(id)sender {
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *regVC = [sb instantiateViewControllerWithIdentifier:@"registerViewController"];
    regVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:regVC animated:YES completion:^{
        NSLog(@"present Modal View");
    }];
}

更简单的一个方法,然而在运行时,注意是在点击reg按钮时App Crash掉了,错误关键字如下:

send unrecognized selector to instance 0xXXXXXXXX

其中instance就是self本身.想当然的认为肯定是presentViewController:方法导致的,调试时发现App在调用presentViewController:本身并没有出错,而是在reg方法返回后才崩掉.这时还是惯性思维,丝毫没有察觉…

结果错误和presentViewController:没有半毛钱关系,是由于reg按钮上设置了2个回调方法,其中一个已经不存在了…

好吧,事后回过头来看看出错信息:

  • 首先,报的错是self中未找到presentViewController方法,但是self是UIViewController的实例,是不可能没有这个方法的
  • 然后App在presentViewController调用后都没有出错,那么显然由这个方法负责的可能性会很低

由以上2条可以清楚推断出原因不在presentViewController方法,而是另一个不存在self中的方法,到哪里去找显而易见了…

Cocoa惯性思维调试一例

原文:http://blog.csdn.net/mydo/article/details/50659182

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!