自定义 UITableViewCell 给我:这个类不符合键值编码
Posted
技术标签:
【中文标题】自定义 UITableViewCell 给我:这个类不符合键值编码【英文标题】:Custom UITableViewCell gives me: this class is not key value coding-compliant 【发布时间】:2012-08-16 10:44:02 【问题描述】:首先,这个讨论并没有解决我的问题。
Custom UITableViewCell subclass: This class is not a key value coding-compliant
设置:
我在MainViewController
中有一组 Person 对象。
想要在AllContactsViewController
中显示UITableView
中的对象。
问题:
使用默认 UITableViewCell
时,一切都按预期工作。
当我使用我的自定义 TableCell
时,我得到一个错误指向
这个类不符合键值编码。
在我将IB
中的三个outlets
中的任何一个与我的TableCell
类连接后,立即发生此错误。
注意:
TableCell
具有三个属性:name
& email
标签 + imageView
。
希望你能帮忙。
TableCell.h
#import <UIKit/UIKit.h>
@interface TableCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *emailLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
TableCell.m
#import "TableCell.h"
@implementation TableCell
@synthesize nameLabel, imageView, emailLabel;
AllContactsViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellIdent = @"TableCell";
TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdent];
if (cell == nil)
NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"TableCell" owner:self options:nil];
cell = [array objectAtIndex:0];
NSString *firstAndLastnameString =
[NSString stringWithFormat:@"%@ %@",
[(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] firstName],
[(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] lastName]];
cell.nameLabel.text = firstAndLastnameString;
cell.emailLabel.text =
[(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] eMail];
cell.imageView.image =
[(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] contactPicture];
return cell;
更新:
也许IB的截图会有所帮助。
添加了完整的 AllContactsViewController.h
#import <UIKit/UIKit.h>
#import "VCDelegate.h"
#import "TableCell.h"
@interface AllContactsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) id <VCDelegate>delegate;
@property (weak, nonatomic) IBOutlet UITableView *allContactsTableView;
@property (strong, nonatomic) NSMutableArray *allContactsArray;
@property (assign) int currentArrayIndexNumber;
- (IBAction)closeBtnTapped:(id)sender;
@end
【问题讨论】:
哪个键不符合键值对?给出确切的错误信息。 - 您是否确认cell = [array objectAtIndex:0]
实际上返回了您的 TableCell
类的实例?
取决于我在 IB 中连接的 outlet
。我连接name
label
,应用程序崩溃,我连接imageView
,而不是应用程序崩溃。看起来我在TableCell
中声明的所有属性都有问题我确定我得到了TableCell
的实例,否则错误消息必须不同,因为错误指向我在TableCell
中的插座 - 确切错误信息:[<AllContactsViewController 0x7f62ad0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key imageView.'
错误信息指向AllContactsViewController
!将NSLog(@"class=%@", [cell class]);
添加到您的代码以进行检查。
控制台输出:2012-08-16 14:12:57.553 Contacts+[15330:c07] class=TableCell
看看这个答案***.com/a/13300245/163936
【参考方案1】:
如果你是从文件所有者那里连接出口,你应该做不同的事情:
1 - 将 UITableViewCell 的类定义为您的 TableCell 类:
2 - 连接插座不是来自文件所有者,而是来自对象列表中的 TableCell:
【讨论】:
在 IB (Identity Insp.) 中,我已经将class
设置为 TableCell
。因此,当我 ctrl 单击文件所有者时,我看到了 outlets
我在 TableCell
中声明的@
嗨 Natan,很遗憾,没有,我去 IB 将 TableViewCELL
设置为我的自定义 class
。 CTRL单击cell
并连接outlets
但同样的错误。我已经编辑了我的原始帖子并添加了屏幕截图。也许有帮助。
转到您的 AllContactsViewController 并检查您是否没有任何插座连接到某物,但实际上插座可能不存在。
我拥有的 AllContactsViewController 中唯一的 IBOutlet 是 UITableView。我已经用整个 AllViewController.h 文件更新了我的原始帖子。
谢谢,连接 TableCell 而不是 File's Owner 的插座也为我解决了这个问题。有理由必须这样做吗?我实际上犯过几次这个错误,所以我想知道为什么 Xcode 不会自动创建 UITableViewCell 子类和 .xib 以便您可以像连接其他 UI 组件一样连接自定义单元格中的新组件界面生成器?【参考方案2】:
一切都在我的项目中正确完成,并且在尝试使用自定义单元格及其属性时仍然收到。这是我如何解决我的问题。
CustomUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomUITableViewCell" forIndexPath:indexPath];
真正击中我的只是从自定义单元格的“Identity Inspector”中删除 CustomUITableViewCell
类并重新输入它。你会看到变化
-
模块值
从目标继承模块
让它们成为自动出现的值...不要尝试继承它或更改继承或模块值...
【讨论】:
实际上,我按照您所说的重新进入了我的单元格的类,它自动检查了从目标框继承模块 - 以前未选中 - 这解决了我的问题。不知道为什么。【参考方案3】:如果您使用的是 Xcode 6 GM,则 IB 中存在可能导致此错误的错误。我不认为 OP 有这个问题,因为它更明显(你可以在日志中看到“未定义的类 MyXXXCell”)但是因为你像我一样从谷歌得到这个问题,只需尝试在 IB 中输入类名然后再次按回车键,一旦它真正保存在 storyboard/xml 文件中就可以了。
【讨论】:
【参考方案4】:我遇到了同样的问题,这里或其他讨论中的任何 cmet 都帮助了我...最后我只是做了一个干净的原因,我很确定我做的一切都是正确的,是的...神奇地工作!
【讨论】:
【参考方案5】:这发生在我刚刚 Git 合并并解决了一些冲突之后。 它搞砸了我的 XCode 项目。
我尝试了整个 ***。起初我以为我的自定义类 .m 文件尚未添加到编译源类列表中。但这是一种情况,但即使添加它,它也给了我同样的问题。
我是如何解决的:
-
我保留了 .xib 文件及其支持的自定义类 .m 和 .h 文件的备份。
然后清理项目并尝试通过 XCode 运行应用程序(这可能不起作用)
然后将文件重新添加回 XCode 项目,它就可以工作了。
干杯!
【讨论】:
【参考方案6】:使用 Xcode 12 时遇到了同样的问题。它只需在 Identity Inspector 上重新键入类即可。好像是个bug。
【讨论】:
以上是关于自定义 UITableViewCell 给我:这个类不符合键值编码的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xib 文件自动布局宽度自定义 UITableViewCell
来自 NIB 的可扩展自定义 UITableViewCell
自定义 uitableviewcell 中的 Uibuttons
带有 xib 文件和自定义构造函数的自定义 UITableViewCell