今天看到了一個(gè)Xcode log出了一個(gè)錯(cuò)誤 CUICatalog:Invalid asset name supplied: (null)
, Google了一下在StackOverflow上各位大神說(shuō)應(yīng)該是[UIImage imageNamed:]
調(diào)用的時(shí)候, name為nil. 雖然在運(yùn)行的時(shí)候界面一切正常, 但是看到這個(gè)log還是想干掉它走触,或許每個(gè)程序猿都是一個(gè)重度強(qiáng)迫癥患者晦譬。
需要解決的問(wèn)題是查找所有[UIImage imageNamed:]
調(diào)用的時(shí)候, 找到name是nil的地方, 但是整個(gè)項(xiàng)目一搜 imageNamed
顯示 267 results in 117 files
, 人工查找就算了吧.
一開始想到的是用Method Swizzle來(lái)修改[UIImage imageNamed:]
的實(shí)現(xiàn), 在name為nil的時(shí)候用斷言, 查看調(diào)用棧. 但是想想寫了debug之后還得刪掉, 比較麻煩.
于是機(jī)智的我想到了用Symbolic Breakpoint
.
在Xcode的
Breakpoint Navigator
點(diǎn)擊加號(hào), 選擇Add Symbolic Breakpoint.
右鍵選擇
Breakpoint
選擇Edit Breakpoint
, 在Symbol填入[UIImage imageNamed:]
, 在Condition填入[(NSString *)$arg3 length] == 0
或者$arg3 == nil
. 可以自己嘗試po $arg1
,po $arg2
試試看.
- 運(yùn)行程序, 直到程序進(jìn)入斷點(diǎn). 打開
Debug Navigator
觀察調(diào)用棧, 最頂部的一定是[UIImage imageNamed:]
, 點(diǎn)擊調(diào)用棧下一條, 能夠看到有調(diào)用到imageNamed
的代碼, 就是name
為nil
的地方.