使用xib以编程方式设置IBOutlet和文件所有者会导致符合键值编码的错误

我创build一个xib。 xib的文件所有者是一个名为PackageTrackingListViewElement的自定义类。 PackageTrackingListViewElement包含一个名为contentView的IBOutlet属性。 界面生成器中的几个视图连接到名为PackageTrackingListViewElement的自定义类的IBOutlet属性。

我尝试从xib初始化一个对象。

 PackageTrackingListViewElement *element2 = [[[NSBundle mainBundle] loadNibNamed:@"PackageTrackingListViewElementXib" owner:nil options:nil] objectAtIndex:0]; [element2.labelDate setText:@"12/14/15"]; [element2.labelLocation setText:@"Berkeley, California"]; 

在此之后,我将element2对象添加到UIStackView。

我应该在 loadNibNamed 设置文件所有者, 这样我就不会得到xib的所有者不符合我试图访问的属性的键值兼容的错误?

我的错误是[<UIStackView 0x165ddc80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key contentView.' 当我尝试设置stackView作为xib的所有者。 我知道这当然是错的,但是我不能把没有创build的对象设置成自己的主人。 我不明白该怎么做。

唉,知道了。 非常感谢实例化自己作为文件的所有者的XIB文件的UIView?

谢谢你

PackageTrackingListViewElement.h

 #import <UIKit/UIKit.h> @interface PackageTrackingListViewElement : UIView @property (nonatomic,strong) IBOutlet UILabel *labelLocation; - (instancetype)initFromNib; @end 

PackageTrackingListViewElement.m

 #import "PackageTrackingListViewElement.h" @implementation PackageTrackingListViewElement : UIView - (instancetype)initFromNib { return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:nil options:nil] firstObject]; } @end 

你可以简单地做:

 PackageTrackingListViewElement *myView = [[PackageTrackingListViewElement alloc] initFromNib]; [myView.labelLocation setText:@"text"]; //access properties 

通过使用上面链接中的实例化过程,我得到了xib的实例化。 我将xib的文件所有者设置为空(NSObject),而是将根视图(通过selectxib中的视图)设置到PackageTrackingListViewElement,并将所有sockets连接到该视图。