IOS Exception解决方案积累中……

来源:互联网 发布:天猫红包怎么领取淘宝 编辑:程序博客网 时间:2024/05/22 05:22
一、XCode不报任何错误,开始运行就奔溃,停在main函数那里,任何错误信息都不提示。
    这种没有任何错误信息提示的错误是最蛋疼的Bug之一。。。
     1、据我多次的实验,发现这种情况多半是调用了不存在的初始化方法。最容易出错的是你修改了某一个类的初始化方法,在这个初始化方法里面进行了一定的操作,而实例化一个变量的时候却没有调用这个方法。
    2、把UIViewController里面自带的View删除了,重写拖了一个View到Controller里面,却没有将filesOwner的View设置为拖上来的View。
   3、把UIViewController里面自带的View删除了,重写拖了一个View到Controller里面,也将filesOwner的View设置为拖上来的View了,但是在代码中又多余地用了self.view addSubView方法视图将这个View又一次加到Controller的View上面。

二、使用NSArray的arrayWithObjects:方法发生运行时错误
如图,编译时不报任何错误。
IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛
 
运行时就总是在这个地方报错Thread1:Program received signal:"EXC_BAD_ACCESS",也不输出任何错误提示信息

IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛
 
看了好久,感觉数组初始化的方法没有错啊,为什么会报错呢。还原了模拟器还是不行。这时想到了使用Analyze工具,选中XCode 的Product下面的Analyze就发现编译器在这里找到了异常:
Argument to 'NSArray' method 'arrayWithObjects' should be an Objective-C pointer type,not 'char *'

IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛

 仔细一看,原来在“贵阳”的前面少加了一个@符号,编译器将它当中char *类型的而不是当成OC的指针类型了,所以报错了。
在初始化数组的时候,数据很多的时候很容易出错,比如说两个元素之间少打了一个@符号,或者少打一个,号,编译器并不会报错,但是在使用数组的时候就奔溃了,所以在使用数组的时候一定要细心再细心,否则会蛋疼很久。。。

三、Implict conversion of 'int' to 'CAMediaTimingFunction*' is disallowed with ARC
在为UIView添加动画效果的时候,报了这个错,我是用了ARC的。
在没有使用ARC的情况下:
CATransition *animation = [CATransition animation];
animation.timingFunction = UIViewAnimationCurveEaseInOut;
这样写是没有问题的。

但是在使用ARC的情况下就是这样的:
IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛
 
很显然是类型转换的时候出了错误。那么将Int类型的UIViewAnimationCurveEaseInOut转换成CAMediaTimingFunction类型的变量就行了。但是这时要将其赋值给animation的fileMode属性。

IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛
 
但是不明白OC在使用ARC和不使用ARC的情况下要搞个这个区别。UIViewAnimationCurveEaseInOut既然已经定义成了宏定义,为什么在使用ARC的情况下不容许直接将其付给animation.timingFunction。说到底是搞了两套标准。

四、switch中的case分支出错
如图,在case中我使用了NSIndexSet,获取数组中的一部分元素。代码没有写错,就是总是显示这样的错误。纳闷了很久,觉得编译器真是弱爆了。
IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛

 把这几句话放在一对大括号里面就不会报错了。。。
IOS Exception解决方案积累中…… - 〇①世界 - 云端的小牛牛

五、UIButton的currentImage和currentTitle属性
以前在修改按钮的image和text属性时都是用的setXXX方法来实现的,今天发现它有chooseDateBtn.titleLabel.text = @"呵呵";这样的属性,还有.currentImage属性。然后就想试试看用这样的方法能不能修改其图像和文字。但是很遗憾总是显示不出来文字和图像。

[chooseDateBtn setTitle:@"呵呵" forState:UIControlStateNormal];

这与下面这句话有啥区别???

chooseDateBtn.titleLabel.text = @"呵呵";

查看文档发现:UIButton的titleLabelcurrentImagecurrentTitle等都是readonly的!!!

 //要设置其显示的内容必须用setXXXX函数

0 0
原创粉丝点击