iOS客户端crash原因总结(持续更新...)

1.字典

赋值

setObjectForKey key不能为nil,object不能为nil
setValueForKey key不能为nil,value可以为nil
dic[key] = value; key不能为nil,value可以为nil
Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.

取值

[dic objectForKey:key]; key可以为nil
[dic valueForKey:key]; key也可以为nil

在使用@{@”key”:value} 这种方式初始化的时候,一定要对value做是否为nil的判断,为nil就不要加入Dictionary,否则会挂

  if (key.length > 0) {
          [dic setValue:value forKey:key];
   }
   if ([arrKeys containsObject:key]) {
            [dic setValue:value forKey:key];
   }

或使用标准的初始化方法:
NSDictionary dictionaryWithObjectsAndKeys:value1,@"v1",value2,@"v2",value3,@"v3", nil];或其它的几个初始化方法进行初始化,但是这个方法如果value为nil就初始化的字典也为nil,也是一个坑,你可能以为字典不为nil,仅仅是这个key和value不存在。
关联:
使用@[]方法初始化NSArray也有此坑,规避方法同字典一样

2.数组

取值

(1)取值范围越界
index 0 beyond bounds for empty NSArray

if(index < arr. count) {
   [arr objectAtIndex:index];
 arr[obj];
}

存值

(1)插入nil
attempt to insert nil object from objects[0]
(2)插入范围越界
index 1 beyond bounds for empty array

if(obj && index < arr. count) {
 [arr insertObject:obj atIndex:index];
}

3. unrecognized selector sent to instance

(1)xib连线的方法未实现,第一次连线后代码中将方法删除,控件中没有删除
(2)代理未实现@optional代理方法
(3)响应 delegate 的VC,或者 View 的实例被提前释放了

解决方法:
if (self.delegate && [self.delegate respondsToSelector:@selector(xxx)])

4.Invalid parameter not satisfying: date

给datePicker赋值的NSDate为nil,可能因为日期格式化字符串不对,由dateFormatter生成的date为nil,尽量用系统方法计算日期。
解决方法:

    if (date) {
        _dpBirth.date = date;
    }

5. Range or index out of bounds

构造range时,使用NSMakeRange时loc或者len越界,如果该range不使用也不会crash,在调用这两个方法时会crash:
substringWithRange:
replaceCharactersInRange:
解决方法:

 if (loc < textString.length && len <= textString.length - loc) {
      NSMakeRange(loc, len);
  }

6. this class is not key value coding-compliant for the key lblBut.

控件属性重复拉线,一个控件拉出两个属性,删除其中一个
不可变字典调用了setValueForKey,调用方法前看清是不是可变字典

7.section (2) beyond bounds (1). row (1) beyond bounds (1) for section (0).'

手动创建NSIndexPath时row和section越界,如果该indexPath不使用也不会crash,在调用:

[_mainTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

解决方法:
根据tableView的属性和方法算出section和row的个数进行判断

@property (nonatomic, readonly) NSInteger numberOfSections;
- (NSInteger)numberOfRowsInSection:(NSInteger)section;

 if ([_mainTableView numberOfSections] > section && [_mainTableView numberOfRowsInSection:section] > row) {
         NSIndexPath* indexPath = [NSIndexPath indexPathForRow:row inSection:section];
    }

8.延迟调用代理方法时delegate为nil(ios7)

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"xxx" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alert show];
 [self performSelector:@selector(pop) withObject:nil afterDelay:2];

- (void)pop {
 [self.navigationController popViewControllerAnimated:YES];
}

解决方法:
alertView如果不处理点击事件要将delegate设为nil,如果涉及到跳转的先处理完代理事件在跳转页面

9.kvo

(1).An instance of class ViewController was deallocated while key value observers were still registered with it
kvo没有移除监听,或者kvo多次注册监听
(2)Cannot remove an observer ViewController for the key path "key" from ViewController because it is not registered as an observer
移除的key和注册的key不一致,或者移除多次

解决方法:
确保注册一次要移除一次,不要重复注册,不要重复移除

10.block

(1).block作为属性时要用copy

@property (copy,nonatomic)block; 

(2).调用block需要判断是否为空

if (block) {
     block();
}

不然会报坏内存访问

11.Trapped uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [0 nan; 320 0]'

当用float接收的运算中分母为0,并将该结果放在CGRectMake、CGSizeMake或者CGPointMake中使用,计算结果不使用也不会crash,如果用nsinteger接收也不会crash
c = 0;
float a = b/c; (会crash)
NSInteger a = b/c; (不会crash)
CGRectMake(0,a,width,height);
解决方法:
进行运算时分母不能为0

12.使用高版本的api,如alertViewController(iOS8)

13.使用NSTimer 的target被释放了,而timer还去执行定时方法,回调的时候找不到对象就会挂掉

在viewWillDisappear里将[timer invalid],并将timer = nil;

14. Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

原因:
再给导航栏设置left和rightItem时使用下面的方法在iOS7中可能出现闪退,原因未知。

UIBarButtonItem *leftBar = [[UIBarButtonItem alloc]  initWithCustomView:_btnBack];
self.navigationItem.leftBarButtonItem = leftBar;

解决方法:
使用下面的方法代替:

UIBarButtonItem *rightBar = [[UIBarButtonItem alloc] initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:@selector(didPressedFinish)];
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, rightBar, nil];

//当str为nil时会奔溃

[self stringByAppendingString:str];

当str为nil时会奔溃

NSMutableAttributedString *sTitle = [[NSMutableAttributedString alloc] initWithString:str];

15.UIKBBlurredKeyView candidateList:unrecognized...

原因,当项目中引入的分类重写了UITouchBegans、move、end方法,用户在使用手写输入法时会出现闪退
解决方法:将分类中的这三个方法注释掉。

16. SIGSEGV xx 系列

原因: 对于不正确的内存处理,如当程序企图访问 CPU 无法定址的内存区块时,计算机程序可能抛出 SIGSEGV 由于访问了坏的内存造成程序奔溃
现象:app页面卡住不动

17. An Objective-C message was sent to a deallocated 'xxx' object (zombie) at address

ViewController respondsToSelector:message sent to deallocated instance
原因:delegate的targetvc被提前释放,导致调用代理方法时访问了僵尸对象,有可能是delegate的属性没有设为weak而是assign,或者delegate的属性是weak但是使用的时候却没有用self.delegate调用,可能直接使用了成员变量
不断更新。。。有补充的可以留言

18.Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)

控制台打印

-[UIView requestWillSendCallback:]: message sent to deallocated instance 0x7d554c20

原因:通知没有移除

19.UICollectionView没有注册cell

报错:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier ZTPhotoCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

20.UIConllectionView的cellForItemAtIndexPath代理方法返回了nil

报错:对这个错误不够敏感,找了半天,浪费了可爷和妹子聊天的时间。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'the collection view's data source did not return a valid cell from -collectionView:cellForItemAtIndexPath: for index path

21.Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'

22.CFPrefsSearchListSource alreadylocked_copyValueForKey:

NSUserDefaults

使用NSUserDefaults时key为nil

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容