今天发现Xcode
控制台打印了几个log,Error: CUICatalog: Invalid asset name supplied: (null)
,后来上网一查,说是[UIImage imageNamed:name];
name
值为空,所以就导致了这个错误。
怎么解决?
1.每个使用[UIImage imageNamed:name]的地方打断点
。(PASS)
2.使用runtime
对[UIImage imageNamed:name]
进行方法交换,然后在交换过后的方法处打断点,看堆栈信息,寻找引起错误的方法。
3.借助Xcode
提供的symbol breakpoint
来解决这个问题。(本文主要讲这种方法)
1.选择Debug Navigator
,然后点击左下角+
号按钮
2.编辑
symbol breakpoint
Symbol:[UIImage imageNamed:]
Condition:$arg3 == nil
如果是使用真机调试
Condition
填写$args0 == nil
,如果是模拟器填写$arg3 == nil
3.运行,在图片名字为空的地方就会触发这个断点
4.然后通过Debug Navigator
,观察调用栈, 最顶部的是[UIImage imageNamed:]
, 点击调用栈下一条, 能够看到有调用到imageNamed
的代码, 就是name
为nil
的地方。
5.到此,找到了imageName
为空的代码。
但是在第2步编辑symbol breakpoint
时有几个编辑项,接下来讲一下这几个编辑项的是什么作用。
Symbol
断点触发函数。
如果是C函数的话只需要写函数名就行,不用写后面的()和参数。如NSLog
。
OC方法的样式[className methodName]
。
Module
模块筛选,可以指定在某一个库中查找。如libSytem.B.dylib
。
Condition
触发条件。如添加第一个参数不能为nil。这里$arg3
代表第一个参数,$arg4
代表第二个参数,类推。具体$arg3
是什么意思可以参考一下这篇文章。
Ignore
指定到某个次数之后开始触发断点。
Action
断点触发后要执行的动作。
Options
是否进入DEBUG页面。