【问题标题】:Programmatically setting a User Defined Runtime Attribute以编程方式设置用户定义的运行时属性
【发布时间】:2014-10-24 22:03:33
【问题描述】:

我使用 Interface Builder 将用户定义的运行时属性添加到 UIButton。该属性名为strokeColor,类型为Color

我尝试以编程方式设置,如下:

UIColor *someColor = [UIColor yellowColor];
[myButton setValue:someColor forKey:@"strokeColor"];

第二行崩溃,我收到以下错误:

'*** 由于未捕获的异常 'NSUnknownKeyException' 导致应用程序终止,原因:'[ setValue:forUndefinedKey:]:这个类不是键值 按键描边颜色的编码兼容。'

此异常的原因可能是什么?用户定义的颜色类型的运行时属性期望什么数据类型?

【问题讨论】:

    标签: ios objective-c uibutton interface-builder


    【解决方案1】:

    运行时属性允许您访问对象的属性这些属性不会在界面生成器中显示,但您仍然必须定义通过运行时属性访问的任何属性。如您所见,只需将运行时属性添加到没有匹配属性的类就会引发异常。

    在您的情况下,如果您希望能够通过运行时属性在 UIButton 上设置名为 strokeColor 的属性,首先您必须创建一个具有该属性的 UIButton 子类或类别,然后您将能够设置它对应的运行时属性;

    这是一个UIButton 类别:

    @interface UIButton (Coloring)
    
    @property (nonatomic, strong) UIColor *strokeColor;
    
    @end
    

    【讨论】:

    • 我在界面生成器中添加了一个名为“strokeColor”的运行时属性。 setValue:forKey API 是以编程方式设置这些运行时属性的方法。
    • @HatchmasterJ 啊,完全误解了这个问题。已更新。
    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 2016-06-12
    • 2012-08-20
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2017-08-05
    相关资源
    最近更新 更多