Cocoa惯性思维调试一例

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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中的方法,到哪里去找显而易见了…

时间: 2024-10-13 23:30:59

Cocoa惯性思维调试一例的相关文章

人的惯性思维

这次AlphaGo以4:1战胜李世石,结果不算意外,几年前,我也觉得围棋被机器干掉距离还很远,理由其实很简单,就是围棋的计算量非常大.持有这种观念的人大有人在,包括赫赫有名的围棋大师聂卫平.持这种观念其实属于正常人,因为我们一致认为计算机的特长在计算,对于人类这种抽象能力 ,计算机是没法学的.但我们都忽视了一个基本的东西:从原子的角度,计算机和人其实是没有什么区别的,人能学习,机器注定是可以学习的.从另外一个角度来说,人生小孩本质也是一种生产,人的后代可以通过学习达到很高的能力,本质上来说,机器

Android漫游记(4)---.so文件动态调试一例

Android平台的动态调试一直以来是个困扰我等Coder的头疼问题,特别是对于本地的动态调试支持,可以说是"弱智"级别的,不知道Google的新版NDK和新出的Android Studio对这块支持如何,让我们拭目以待. 言归正传,我这里采用的是cygwin+ndk-gdb的调试模式,灵感来自于XDA的一篇博文(点击打开链接),平台和原文作者不同: 1.Win7 64 2.NDK r9d x86_64 3.Android 4.2.2 4.cygwin 64 5.IDA pro 6.1

惯性思维是排错的大敌

许久没写东西了,今天遇到个事,和大家一起聊聊. 一朋友找我调个华三防火墙,需求很简单,防火墙有电信.联通两个出口,加个策略路由把一部分用户指定从联通接口出去.这不是小菜一碟了,登上去三下两下配完,测一测,不行.我有点奇怪,这配置很简单,又重新配了一次,还按?把参数又看看,觉得没什么,但是比起以前的老设备确实又多了一些选项,是不是这个影响了. 上网打开手册,看看,没看出个所以然,回头再测测,不行.在防火墙上PING一下联通的网关,发现不通,我问他是不是联通线路还没通,他说不会啊,用电脑测了,可以上

思维的惯性

我们经常说要破除思维定势.避免思维惯性.这个想法是非常对的.但事实上是非常难做到的,由于大脑研究发现.人在使用眼睛看东西时.并非把全部的信息都进行处理,仅仅有大约10%的信息是新的,其它的信息都是补全的.人一方面须要这样的信息"抽象"+自己主动补偿来加速脑袋CPU的处理速度.但还有一面这样的处理机制又非常easy形成思维定势--你看到的或许不是真实的. 从这样的大脑的执行机理来说,我们确实应该努力的避免惯性思维.但无法杜绝,一个较好的方法就是更新定势,形成非常有利于自己的一些定势. 从

如何打开pr_debug调试信息

转载:http://blog.csdn.net/helloanthea/article/details/25330809 以DMA的调试为例,先来看看一个pr_debug函数调用 pr_debug("%s: %s (%s)\n", __func__, chan ? "success" : "fail", chan ? dma_chan_name(chan) : NULL); 在include/linux/printk.h里找到pr_debug的定

计算机程序的思维逻辑 (13) - 类【转】

类 上节我们介绍了函数调用的基本原理,本节和接下来几节,我们探索类的世界. 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,四种整形byte/short/int/long,两种浮点类型float/double,一种真假类型boolean,一种字符类型char,其他类型的数据都用类这个概念表达. 前两节我们暂时将类看做函数的容器,在某些情况下,类也确实基本上只是函数的容器,但类更多表示的是自定

<读书笔记>软件调试之道 :从大局看调试-零容忍策略

声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! -------------------------------------------------------------------------------------------- 缺陷优先 如何使缺陷修复与软件开发相结合? 如何估计缺陷修复花费的时间? 如何确保项目不会陷入<人月神话>中所描述的无数缺陷修复的焦油坑中呢? 缺陷优先 要采用早起缺陷修复原则,并且基于以下两

穷人思维和富人思维

什么是穷人?我想讨论的"穷人"不是<贫穷的本质>一书里提到的,日收入只有0.99美元的"穷人".尽管任何社会中都会有"穷人"的存在,但在不同的社会中,"穷人"在社会结构中的含义却很不相同.在传统社会中,低微的收入.低下的社会地位以及世代间的传承往往是结合在一起的,所以,在这样的社会中,"穷人"不仅有着极易辨认的外部特征,而且与"富人"在许多方面都有对照鲜明的反差.而在现代社会

计算机程序的思维逻辑 (13) - 类

类 上节我们介绍了函数调用的基本原理,本节和接下来几节,我们探索类的世界. 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,四种整形byte/short/int/long,两种浮点类型float/double,一种真假类型boolean,一种字符类型char,其他类型的数据都用类这个概念表达. 前两节我们暂时将类看做函数的容器,在某些情况下,类也确实基本上只是函数的容器,但类更多表示的是自定