【发布时间】:2012-08-03 22:46:40
【问题描述】:
一些背景:
我写了一个 UIScrollView 派生类,它有一个名为 contentView 的 outlet,类似如下:
@interface MyScrollView : UIScrollView {
IBOutlet UIView * contentView;
}
...
@end
我的出口,在这种情况下是一个 iVar,而不是一个属性。我在 Interface builder 中使用了我的类,并将视图连接到 contentView 插座。然而,在运行时,我发现我的 iVar 仍然为 nil,并且没有设置为所需的视图对象。
一些实验表明,如果我重命名插座或将插座设为属性而不是 iVar,一切都会正常工作。进一步的研究表明,使用我的插座作为名为@987654323@ 的 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