【问题标题】:Using xib programatically setting IBOutlet and file owner results in key value coding-compliant error使用 xib 以编程方式设置 IBOutlet 和文件所有者会导致键值编码兼容错误
【发布时间】:2016-02-15 19:07:49
【问题描述】:

我创建了一个 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 的所有者不符合我的属性的键值的错误正在尝试访问?

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

【问题讨论】:

  • 我应该如何设置 xib 的文件所有者以使该类的属性可以在视图控制器中从外部访问?

标签: ios objective-c xcode xib key-value


【解决方案1】:

唉,想通了。非常感谢Instantiating a UIView from a XIB file with itself as the file's owner?

谢谢nebs

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),而是将根视图(通过选择 xib 中的视图)设置为 PackageTrackingListViewElement 并将所有出口连接到该视图。

【讨论】:

  • 谢谢你,虽然它已经有一年多了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 2015-08-15
  • 2021-11-10
  • 1970-01-01
  • 2018-10-14
  • 2018-12-05
相关资源
最近更新 更多