我知道这个错误的意思,但我真的很挣扎,我需要别人的帮助:
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.'
这里有我的代码:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface AlertCell : UITableViewCell {
IBOutlet UILabel *actionText;
}
@property (retain, nonatomic) UILabel *actionText;
@end
并且
@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
@end
任何人都可以帮助我吗?非常感谢!
答案 0 :(得分:102)
您可能将代码基于网络教程,例如http://www.e-string.com/content/custom-uitableviewcells-interface-builder或http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/
上的教程您的问题(我99%确定这是您绊倒的地方,我只是犯了同样的错误)是在界面构建器中,您应该从文件所有者链接您的IBOutlets时应该从单元格视图链接它们。这就是你得到错误的原因。
答案 1 :(得分:84)
有几个选项可以解决这个问题 - 我会让你决定哪个是最合适的。
它失败的原因是因为所有者被传递为零。您将actionText插座绑定到IB中文件的所有者,但是在加载笔尖时,所有者为零。我猜想在幕后加载Nil所有者时会使用NSObject,这就是你得到键/值错误的原因。
我以前建议将单元格作为所有者传递也会失败,因为我不知道Nib是如何构建的;因为你还没有创建它,所以单元格是零(并且dequeue正在向后传递nil,所以即使传递单元格,因为所有者仍然基本上没有通过nil)。
两个选项:
-------原始答案保存在下面,因为文件的所有者类也是导致此错误的常见原因-------
它表明你已经在InterfaceBuilder中实例化了一个AlertCell,并且你将某些东西绑定到了actiontext,但是这个类没有设置为AlertCell,它仍然是NSObject?
在Interface Builder中查看该对象的工具选项板的“标识”选项卡上的类文本框。该类应该是AlertCell,但我猜它仍然设置为NSObject。
顺便说一句,并且可以随意忽略这个建议,但是我鼓励你做一些额外的事情,纯粹来自 Objective C期望/约定的观点:
答案 2 :(得分:7)
我遇到了同样的问题,我在任何文件中都找不到提到的变量/元素。我按照以下步骤操作。
环境:Xcode 6
答案 3 :(得分:5)
从nib / StoryBoard文件中检查UIControl 引用OutLet属性名称
答案 4 :(得分:4)
确保选择单元格以放置自定义类而不是文件所有者来添加自定义类 在右侧顶部 如果您已经这样做,在进行任何更改之前删除插座连接,然后从文件所有者中删除自定义类并将类添加到单元格视图
答案 5 :(得分:3)
也许有帮助: 当您选择文件所有者时,Indentity Inspector - UITableViewCell, 选择对象内的单元格您的自定义单元格
答案 6 :(得分:2)
在这2小时后,我意识到我忘了
@synthesize tableView = _tableView;
希望它有所帮助。
马里奥
答案 7 :(得分:0)
#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
查看Cell代码和故事板设置,它们是否全部存在,也许您已更改其名称。