美文网首页
Error: CUICatalog: Invalid asset

Error: CUICatalog: Invalid asset

作者: ttys苹果核 | 来源:发表于2016-12-05 17:36 被阅读86次

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

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

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

symbol breakpoint end.png

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

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

      本文链接:https://www.haomeiwen.com/subject/dsexuttx.html