iOS *** Assertion failure in -[MASLayoutConstraint _setSymbolicConstant:constant:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1290/Layout.subproj/NSLayoutConstraint.m:657 错

1.概述

先直接说原因吧 :
出现这个崩溃的原因是UITableView在加载数据的时候, cell里面的单元格数据为空. 所以出现这个报错的话, 你应该去确认一下数据源是否有值, 或者数据是不是不对的.

好了, 下面说我自己的项目里的这个错误.

最近项目崩溃了, 打印出来的错误信息如标题所示, 平时都没有这个崩溃, 打了全局断点, 停留在这个地方

iOS *** Assertion failure in -[MASLayoutConstraint _setSymbolicConstant:constant:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1290/Layout.subproj/NSLayoutConstraint.m:657 错_第1张图片
image.png

因为之前一直没有这个崩溃, 一时间我也是有点懵逼, 但撞上了就要解决.

2. 原因的寻找

出现崩溃我们可能首先想到的就是打全局断点, 我也是这么做的, 看到如上图所示的地方, 第一反应肯定就是想是不是页面的布局约束有错误......确认这个思路的过程省略一百万字......总之最后确认不是这个错误;

蓝后, 继续找啊, 继续找的时候就是从viewdidload方法里开始一个一个的打断点, 最后发现在获取本地数据的时候返回来的数据是不对的!!!!!
为了更好的说明导致错误的过程, 我先说一下项目里这个页面的数据加载过程:

viewdidload-->加载本地数据然后设置界面--->加载网络数据然后刷新界面并且将本次数据保存到本地

通过一个个的打断点发现, 加载本地数据的时候返回来的是这个

{"status":{"Code":"14","Msg":"登录过期,请重新登录"}}

看到这里恍然大悟, 原来将上一次返回来的登录过期的数据也保存起来了, 这样的数据肯定是不能用来设置界面的, 所以导致了开篇所说的结果.

3. 问题的解决

找到原因之后就很简单了, 将不正确信息的json不保存包本地就好了. 经过修改之后, 果然如此

你可能感兴趣的:(iOS *** Assertion failure in -[MASLayoutConstraint _setSymbolicConstant:constant:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1290/Layout.subproj/NSLayoutConstraint.m:657 错)