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中的方法,到哪里去找显而易见了…

相关文章
|
大数据 Python
Python中for循环的嵌套应用
Python中for循环的嵌套应用
253 1
|
监控 安全 Shell
【Shell 命令集合 系统管理 】Linux 获取用户信息 finger命令 使用指南
【Shell 命令集合 系统管理 】Linux 获取用户信息 finger命令 使用指南
180 0
|
5月前
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
399 4
|
12月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
454 3
|
7月前
|
人工智能
第一批拟立项名单|2024年阿里云协同育人项目立项通知
2024年阿里云协同育人项目第一批拟立项名单公布,涵盖教学内容和课程体系改革、实践条件及基地建设共81项。
|
11月前
|
算法 Java Linux
java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
这篇文章讨论了在Linux环境下使用Java Graphics2D合成图片时遇到的中文显示问题,并提供了解决方案,包括如何在Linux系统中添加中文字体库。
181 1
java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
|
Linux 开发者 Docker
如何构建在 Docker 容器中运行命令?
【1月更文挑战第6天】
238 0
|
消息中间件 监控 关系型数据库
综合医院LIS系统全套源码,开箱即用,支持二次开发
该实验室管理信息系统采用C# .Net开发,支持多种主流数据库,利用MQ和Remoting实现分布式3层架构。系统强调标本全周期管理,包括采集、检测、报告和归档,集成多种医院系统,提供生化等多个专业报告,智能审核规则,支持危急值管理、微生物培养跟踪,并具备全面的质控和试剂管理功能。系统维护、条码、样本、常规与微生物检验、质控、查询统计、试剂耗材管理以及临床提醒和报告打印等功能一应俱全。
298 5
综合医院LIS系统全套源码,开箱即用,支持二次开发
|
Ubuntu 前端开发 Linux
Ubuntu防火墙命令大集合
【7月更文挑战第13天】
485 1
Ubuntu防火墙命令大集合
|
11月前
|
安全 Devops 网络安全
【DevOps】Docker 最佳实践指南(绝对干货)
Docker 是一种领先的容器化平台,可简化应用开发、部署和管理。本文档介绍 Docker 的最佳实践,涵盖安全性、网络、镜像、主机安全及资源限制等方面,帮助用户高效利用 Docker,确保应用的安全性和性能。
400 0