今天发现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 breakpointSymbol:[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页面。
