美文网首页
iOS UIAlertAction 使用KVC改变“titleT

iOS UIAlertAction 使用KVC改变“titleT

作者: 婼熙之名 | 来源:发表于2019-11-26 10:46 被阅读0次

    报错信息

    [<UIAlertAction 0x7fbf48408d30> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key titleTextColor.

    原因:iOS 8.3系统以下,UIAlertAction没有titleTextColor这个key值。我们可以使用RunTime验证。

    #pragma mark---runtime分析获取UIAlertAction的属性列表和成员变量列表:

    -(void)aboutAlert{

        unsignedintcount;// 记录属性个数

        objc_property_t *properties = class_copyPropertyList([UIAlertAction class], &count);

        // 遍历

        NSMutableArray *propertiesArray = [NSMutableArray array];

        for(inti =0; i < count; i++) {

            // objc_property_t 属性类型

            objc_property_tproperty = properties[i];

            // 获取属性的名称 C语言字符串

            constchar*cName =property_getName(property);

            // 转换为Objective C 字符串

            NSString *name = [NSString stringWithCString:cName encoding:NSUTF8StringEncoding];

            [propertiesArrayaddObject:name];

        }

        free(properties);

        NSLog(@"propertiesArray == %@",propertiesArray);

        //获取成员变量列表

        NSMutableArray *ivarArray = [NSMutableArray array];

        Ivar *ivarList = class_copyIvarList([UIAlertAction class], &count);

        for(inti =0; i < count; i++) {

            IvarmyIvar = ivarList[i];

            constchar*ivarName =ivar_getName(myIvar);

            [ivarArrayaddObject:[NSString stringWithUTF8String:ivarName]];

        }

        free(ivarList);

        NSLog(@"ivarArray == %@",ivarArray);

    }

    8.3以下版本打印结果:

    高版本:

    通过以上内容可见:成员变量在不同版本下不一定存在,当成员变量存在时我们才能使用KVC进行修改,否则系统会奔溃。

    谨记 KVC 要慎用!!!

    相关文章

      网友评论

          本文标题:iOS UIAlertAction 使用KVC改变“titleT

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