类不是关键值编码兼容

我知道这个错误的意义,但我真的很困难,我需要别人的帮助:

2010-09-21 15:03:11.562 Stocks[5605:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x499fb20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key actionText.' 

这里有我的代码:

AlertCell.h

 #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> @interface AlertCell : UITableViewCell { IBOutlet UILabel *actionText; } @property (retain, nonatomic) UILabel *actionText; @end 

AlertCell.m

 @implementation AlertCell @synthesize actionText; - (void)dealloc { [actionText release]; [super dealloc]; } @end 

问题就在那里发生:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; AlertCell *cell = (AlertCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" owner:nil options:nil]; for (id oneObject in nib) { if ([oneObject isKindOfClass:[UITableViewCell class]]) { cell = (AlertCell *)oneObject; break; } } } cell.actionText.text = [arrayAlert objectAtIndex:indexPath.row]; return cell; } 

在这一行上:

 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" owner:nil options:nil]; 

如问,这是我的TableViewCOntroller头:

 #import <UIKit/UIKit.h> @interface AlertesViewController : UITableViewController { NSMutableArray *arrayAlert; } 

你可以看到我的XIB文件(如XML): http : //pastebin.com/FDVzLYZu

@结束

任何人都可以帮我吗? 非常感谢 !

有几个选项来解决这个问题 – 我会让你决定哪个是最合适的。

失败的原因是因为所有者被通过为零。 您将actionText出口绑定到IB的文件所有者,但在加载笔尖时,所有者为零。 我猜测,当使用一个NSObject的时候在后台加载一个零的所有者,这就是为什么你得到的键/值错误。

我以前的build议,通过细胞作为所有者也将失败,因为我不知道如何构build笔尖, 该单元是零,因为你还没有创build它(和出队传递无回,所以即使传递单元作为所有者仍然本质上通过零)。

两个选项:

  • 在你的-cellForRowAtIndexPath:(NSIndexPath *)indexPath实现中实例化一个新的单元格,并将新的单元格作为所有者传递(但是我想这不是最好的解决scheme)
  • 或者,我build议这是更好的解决scheme,将您的nib文件中的actionText绑定到警报单元,而不是文件的所有者(您有文件的所有者和警报单元 – 绑定到UILabel的actionText出口警报单元,而不是文件的所有者,这是目前正在做的) – 我怀疑这是你想要的。 考虑到这一点,文件的所有者可以再次成为NSObject。

——-原来的答案保存在文件的所有者类也是这个错误的常见原因——-

它build议你已经在InterfaceBuilder中“实例化”一个AlertCell,并且你绑定了一些actiontext,但是这个类没有设置AlertCell,它仍然是NSObject?

在界面生成器中查看该对象的工具选项板的标识选项卡上的类文本框。 该类应该是AlertCell,但我猜想它仍然设置为NSObject。

顺便说一句,可以随意忽略这个build议,但是我鼓励你们做一些额外的事情,纯粹是从Objective C期望/惯例的angular度来看:

  • 在你的课后命名你的文件(大写字母的第一个字符)。
  • 前缀你的类名称; 两个大写字母,通常是您的首字母(例如,我将其命名为DWAlertCell)。

您可能将您的代码基于Web教程,如http://www.e-string.com/content/custom-uitableviewcells-interface-builder或http://www.icodeblog.com/2009/05/ 24 /定制的UITableViewCell-使用接口助洗剂/

你的问题(我99%确定这是你绊倒的地方,我只是犯了同样的错误)是,在你将它们从单元格视图链接起来的时候,你在界面生成器中链接了文件所有者的IBOutlet。 这就是你得到错误的原因。

我有同样的问题,我找不到任何文件中提到的variables/元素。 我遵循以下步骤。

环境:Xcode 6

  • 转到Xib文件,并在每个UI元素上单击鼠标右键(Ctrl +鼠标)查看其关联。
  • 在其参考网点部分,您将能够find错误的关联。
  • 删除该关联
  • 清理解决scheme并构build文件夹
  • 重置模拟器
  • 重build并运行项目。

检查UIControl从nib / StoryBoard文件引用OutLet属性名称

确保select单元格放置自定义类不是文件的所有者在右侧顶部添加自定义类,如果您已经这样做,在做任何更改之前删除出口连接,然后从文件的所有者中删除自定义类,并添加类到单元格视图

也许它有帮助: 当您select文件的所有者时,缩进检查器 – UITableViewCell, 当您select了对象内的单元格您的自定义单元格

2个小时后,我意识到我忘了

 @synthesize tableView = _tableView; 

希望它有帮助。

马里奥

 #import <UIKit/UIKit.h> @interface ReceptionDetailCell : UITableViewCell @property (weak, nonatomic) IBOutlet UILabel *productName; @property (weak, nonatomic) IBOutlet UILabel *billType; @property (weak, nonatomic) IBOutlet UILabel *bookTime; @property (weak, nonatomic) IBOutlet UILabel *doctorName; @property (weak, nonatomic) IBOutlet UILabel *downBillManName; @end 

检出单元代码和故事板设置,不pipe它们是否都存在,也许你已经改变了它们的名字。