Error: CUICatalog: Invalid asset name supplied: (null),

今天发现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,然后点击左下角+号按钮

Error: CUICatalog: Invalid asset name supplied: (null),_第1张图片
symbol breakpoint.png

2.编辑 symbol breakpoint
Symbol:[UIImage imageNamed:]
Condition:$arg3 == nil
如果是使用真机调试 Condition填写 $args0 == nil,如果是模拟器填写 $arg3 == nil

Error: CUICatalog: Invalid asset name supplied: (null),_第2张图片
symbol breakpoint edit.png

3.运行,在图片名字为空的地方就会触发这个断点

Error: CUICatalog: Invalid asset name supplied: (null),_第3张图片
symbol breakpoint end.png

4.然后通过Debug Navigator,观察调用栈, 最顶部的是[UIImage imageNamed:], 点击调用栈下一条, 能够看到有调用到imageNamed的代码, 就是namenil的地方。

Error: CUICatalog: Invalid asset name supplied: (null),_第4张图片
finished.png

5.到此,找到了imageName为空的代码。

但是在第2步编辑symbol breakpoint时有几个编辑项,接下来讲一下这几个编辑项的是什么作用。

Symbol

断点触发函数。
如果是C函数的话只需要写函数名就行,不用写后面的()和参数。如NSLog
OC方法的样式[className methodName]

Module

模块筛选,可以指定在某一个库中查找。如libSytem.B.dylib

Condition

触发条件。如添加第一个参数不能为nil。这里$arg3代表第一个参数,$arg4代表第二个参数,类推。具体$arg3是什么意思可以参考一下这篇文章。

Ignore

指定到某个次数之后开始触发断点。

Action

断点触发后要执行的动作。

Options

是否进入DEBUG页面。

你可能感兴趣的:(Error: CUICatalog: Invalid asset name supplied: (null),)