最近维护项目时发现控制台有许多的警告输出:
[framework] CUICatalog: Invalid asset name supplied: ''
一、第一种方法
1、添加断点截取图片为空
2、添加参数
[UIImage imageNamed:]
[(NSString *)$arg3 length] == 0
3、效果如下
#import "UIImage+NilImage.h"
#import
#import
@implementation UIImage (NilImage)
+(void)load{
Method imageNamed = class_getClassMethod(self,@selector(imageNamed:));
Method looha_ImageNamed =class_getClassMethod(self,@selector(looha_none_imageNamed:));
method_exchangeImplementations(imageNamed, looha_ImageNamed);
}
+(instancetype)looha_none_imageNamed:(NSString*)name{
if ([self nullToString:name]) {
NSLog(@"打印无图片名称=============%@",name);
return nil;
}
UIImage *image = [self looha_none_imageNamed:name];
if (image == nil) {
NSLog(@"打印无图片名称=============%@",name);
return nil;
}
return [self looha_none_imageNamed:name];;
}
//判断字符串是否为空
+ (BOOL)nullToString:(id)string {
if ([string isEqual:@"NULL"] || [string isKindOfClass:[NSNull class]] || [string isEqual:[NSNull null]] || [string isEqual:NULL] || [[string class] isSubclassOfClass:[NSNull class]] || string == nil || string == NULL || [string isKindOfClass:[NSNull class]] || [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]==0 || [string isEqualToString:@""] || [string isEqualToString:@"(null)"]) {
return YES;
} else {
return NO;
}
}
@end
3、打断点调试,如果图片为nil如下
4、如果项目中有用到imageNamed,但是不存在图片资源,那么就会下个断点调试出来,如下所示:
三、写在最后
1、用第二种方法就可以查找出是否引用nil的图片和使用了图片名,但是没有图片资源的地方。
2、如果你想删除项目中没有用到的图片资源,可以看另一篇文章iOS项目清除图片之LSUnusedResources的使用
END.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)