gpt4 book ai didi

ios - 从 xib 加载 UITableViewCell(此类不符合键的键值编码)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:28 26 4
gpt4 key购买 nike

我很好奇使用 xib 文件布局 UITableViewCell 内容的正确方法。当我尝试按照我在 Internet 上找到的所有步骤操作时,我总是得到

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x10fe7d790> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key statusLabel.'

下面是相关代码

@interface MyCell : UITableViewCell

@property (nonatomic,strong) IBOutlet UILabel* messageLabel;
@property (nonatomic,strong) IBOutlet UILabel* statusLabel;

在我的 UIViewController 中我都试过了

-(void)viewDidLoad {
[self.tableView registerNib:[UINib nibWithNibName:@"MyCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCellReuseID"];
}

或使用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCellReuseID";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if ( !cell ) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil]
lastObject];
// or sometimes owner is nil e.g.
//cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil]
lastObject];
}

// ... remainder of cell setup

return cell;
}

除了我在标题中提到的异常(exception)情况,这两种方法都失败了。看起来 owner:self 的错误是因为 UIViewController 没有 IBOutlet 属性。使用 owner:nil 是因为它在内部使用了一个 NSObject,当然它也没有 IBOutlet 属性。

我发现的唯一解决方法如下。在我的单元格的 init 方法中,我将返回的 View /单元格添加到我的初始化单元格

例如

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// nil out properties

[self.contentView addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil] lastObject]];
}
return self;
}

这看起来真的很矫揉造作(尽管我也可以将 xib 中的基本类型更改为 UIView 而不是 MyCell 或 UITableViewCell),这让它感觉稍微不那么矫揉造作了。

我看过很多帖子,人们遇到了这个特定的错误。这通常被解释为 xib 本身的接线问题,但是如果我删除 xib 中的所有连接它加载正常,但是当我添加回 ui 元素和文件所有者之间的连接时错误返回,所以我不要认为它与“清理”xib 有任何关系(即使查看 xib 的 XML,也没有列出任何错误的连接)。

对于这个错误是如何产生的,还有其他人有任何想法吗?

最佳答案

我必须确保在创建 socket 时指定我挂接到单元格,而不是对象的所有者。当您将连接从单元格中的标签拖到类时,会出现菜单,以便您可以命名它,您必须在“对象”下拉菜单中选择它(您可以选择“文件所有者”或单元格的类名,选择单元格的类名)。当然,您也必须将单元格的类声明为此类,而不仅仅是“TableViewCell”。否则我会继续让类(class)不符合关键要求。所以现在我有了该类的单元格和文件所有者。

关于ios - 从 xib 加载 UITableViewCell(此类不符合键的键值编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com