【问题标题】:In what order does setValue:forKey: search for the KVC-compliant method or ivar?setValue:forKey: 以什么顺序搜索符合 KVC 的方法或 ivar?
【发布时间】:2012-08-03 22:46:40
【问题描述】:

一些背景:

我写了一个 UIScrollView 派生类,它有一个名为 contentView 的 outlet,类似如下:

@interface MyScrollView : UIScrollView {
    IBOutlet UIView * contentView;
}

...

@end

我的出口,在这种情况下是一个 iVar,而不是一个属性。我在 Interface builder 中使用了我的类,并将视图连接到 contentView 插座。然而,在运行时,我发现我的 iVar 仍然为 nil,并且没有设置为所需的视图对象。

一些实验表明,如果我重命名插座或将插座设为属性而不是 iVar,一切都会正常工作。进一步的研究表明,使用我的插座作为名为@9​​87654323@ 的 iVar,加载 nib 实际上会将我想要的视图对象连接到 UIScrollView 中名为 _contentView 的私有 iVar。

我知道 nib 加载使用 KVC 设置值,并且 KVC setValue:forKey: 方法将使用以下任何一种设置值:

  • set{Key}:方法
  • {key}iVar
  • _{key}iVar

我怀疑,但无法证明,首先会尝试查找 set{Key}: 方法,如果失败,则会进行 iVar 枚举以查找 {key}_{key} iVar。这种枚举可能以从超类先于子类处理 iVar 的顺序发生。

是否有记录上述候选人的顺序?与子类相关的超类成员的尝试顺序是什么?

【问题讨论】:

    标签: objective-c ios key-value-coding


    【解决方案1】:

    具体的搜索算法记录在Key-Value Coding Programming Guide

    【讨论】:

    • 非常感谢您找到参考资料。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多