Xcode警告[framework] CUICatalog: Invalid asset name supplied: ''

Xcode警告[framework] CUICatalog: Invalid asset name supplied: '' 这是因为你的UIImage没有赋值图片,影响不大,但是警告很烦,以下就是找到问题的方法

1、创建UIImage的分类,如 #import "UIImage+JSYNono.h"

2、在.h和.m文件中复制以下代码:

.h文件:

#import

#define is_IPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

#define is_IPad (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)

NS_ASSUME_NONNULL_BEGIN

@interfaceUIImage(JSYNono)

+ (__kindofUIImage*)jsy_imageNamed:(NSString*)imageName;

@end

NS_ASSUME_NONNULL_END


.m文件:

// 查看警告 CUICatalog: Invalid asset name supplied

#import "UIImage+JSYNono.h"

#import

@implementation UIImage (JSYNono)

// load方法是应用程序把这个类加载到内存的时候调用,而且只会调用一次,所以在这个方法中实现方法的交换最合适

+ (void)load

{

    // 交换方法实现,方法都是定义在类里面

    // class_getMethodImplementation:获取方法实现

    // class_getInstanceMethod:获取对象

    // class_getClassMethod:获取类方法

    // IMP:方法实现


    // Class:获取哪个类方法

    // SEL:获取方法编号,根据SEL就能去对应的类找方法

    // 获取系统的方法

    MethodimageNameMethod =class_getClassMethod([self class],@selector(imageNamed:));


    // 获取自定义方法jsy_imageNamed

    Methodjsy_imageNamedMethod =class_getClassMethod([UIImage class],@selector(jsy_imageNamed:));


    // 交换方法实现

    method_exchangeImplementations(imageNameMethod, jsy_imageNamedMethod);

}

+ (UIImage*)jsy_imageNamed:(NSString*)imageName

{

    // 1.恢复系统方法加载图片功能

    // 注意:这里不会死循环,因为此时已经交换了方法,调用这个方法,其实是调用系统的方法

    // 注意:这里调用系统的方法不能用super,因为在分类里面不能调用super,分类没有父类

    if(is_IPhone){

        // iphone处理

        UIImage* image =  [self jsy_imageNamed:imageName];

        if(image !=nil) {

            return image;

        }else{

            NSLog(@"加载image为空");

            return nil;

        }

    }else{

        // ipad处理

        UIImage*image = [self jsy_imageNamed:[NSStringstringWithFormat:@"%@_ipad",imageName]];

        if(image !=nil) {

            return image;

        }else{

            image = [self jsy_imageNamed:imageName];

            return image;

        }

    }

}

@end

3、把#import "UIImage+JSYNono.h"放在pch中就可以了

测试代码:[UIImage imageNamed:@""]; 这里没有传图片,会打印:加载image为空


上述代码可以反应图片赋值为空,找到问题解决很简单,没有图片就不赋值,这个警告就没有了

+(instancetype)imageViewWithFrame:(CGRect)frame imageName:(NSString*)imageName{

    UIImageView* imgView = [[UIImageView alloc]initWithFrame:frame];

    if(imageName.length>0) {

        imgView.image= [UIImage imageNamed:imageName] ;

    }

    return imgView;

}

你可能感兴趣的:(Xcode警告[framework] CUICatalog: Invalid asset name supplied: '')