美文网首页
Xcode警告[framework] CUICatalog: I

Xcode警告[framework] CUICatalog: I

作者: 当慧星降临的时刻 | 来源:发表于2020-10-23 09:26 被阅读0次

    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: I

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