0. 写在最前
使用dwarfdump命令解析dSYM文件
- 用来得到app的UUID
$ dwarfdump --uuid xx.app.dSYM
- 使错误的日志能看懂,把相应的内存地址对应到正确的地方
$ dwarfdump --lookup 0x12b45d -arch armv7 xx.app.dSYM
注意:如果一开始dwarfdump命令不能用的话,要先装Command Line Tools,这个在设置里面能下载(cmd+“,”打开设置)。另外还必须进入xx.app.dSYM文件所在文件夹。
参考资料
1. 数据类型出错
崩溃信息:
-[__NSCFConstantString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x36ce2dc8
(null)
原因:
原本_cacheChannel应该为地点,但是实际类型却变成了NSString,从而在取key对应的数据时导致崩溃。
2. KVO注册了被释放的对象
崩溃信息:
An instance 0x128a2b9e0 of class AVPlayerItem was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x128a411a0>
原因:
AVPlayerItem对象已经被释放,但是KVO注册未被移除
3. UITableView刷新指定行
崩溃信息:
Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).
原因:
UITableView的某个Section是可以移除(关闭)的,因此导致改Section被关闭后其余的Section位置也发生了变化,在直接刷新特定Section就发生了错误。
4. Can't add self as subview
崩溃信息:
Can't add self as subview
原因:
-
[self addSubView:self] 引起崩溃
该错误的崩溃堆栈为(图片来自网络:来源):
导航栏错误
原因:
导航栏在做动画的时候,执行了一次 [self.view addSubview:self.view];
5. NSUserDefaults插入不支持数据
崩溃信息:
Attempt to insert non-property list object {
words = "<null>";
} for key SearchHotWord
原因:
- NSUserDefaults插入不识别的数据类型。参考
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。
如果你要保存其他类型或者自定义类型需要用到archiver,需要写“encode”和“decode”两个“method”。
-
插入了错误的数据
向NSUserDefaults插入的数据类型是支持的,但是数据不支持,如上错误是因为(多出现在后台数据返回中,需要注意):
6. Block释放导致的崩溃
崩溃信息:
-[NSMallocBlock containsKey:]: unrecognized selector sent to instance 0x137895480
原因:暂时没有找到明确引发的原因。
7. 应用启动时出现的崩溃
崩溃信息:
+[CATransaction synchronize] called within transaction
原因:
8. 应用启动时出现的崩溃二
崩溃信息:
- stepping may behave oddly; variables may not be available
原因:
9. Realm数据库存储崩溃
崩溃表现:
应用在其中进入的第一个页面会缓存网络数据,但是在64bit CPU机型(iPhone5s及以上)不会有任何问题,在32bit机型(iPhone5s以下)就会出现崩溃。
原因:
所存储的数据中有一个为:
@property (nonatomic, assign) NSNumber<RLMInt> *lastUpdateTime;
也许大家已经发现了,其中持有的方式是assign,而不是strong!!将其改成strong之后问题暂时解决了。
遗留问题:为什么会这样呢?同样的代码在不同环境下出现的原因是什么?(前提:数据库中,该字段是非必须且可为nil的。)
10. 接入ShareSDK时遇到的问题
崩溃表现:
接入shareSDK出现应用启动崩溃,崩溃信息如下:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData wbsdk_base64EncodedString]: unrecognized selector sent to instance 0x127f9aab0'
原因:
不难发现,崩溃的问题跟<WeiboSDK>肯定是脱不了干系的,原来shareSDK中的新浪微博SDK并不支持armv7s,因此我们只需要对应的设置下就好了。
- 移除armv7s:
- 在Other Linker Flags 中添加-ObjC