崩溃创建自定义的UITableViewCell

问题描述:

我试图创建一个厦门国际银行自定义表格视图单元格,但是当我打电话的时候:崩溃创建自定义的UITableViewCell

CustomReferenceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

我得到如下:

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

这里是我的设置:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.tableView registerNib:[UINib nibWithNibName:@"CustomReferenceTableViewCell" 
              bundle:[NSBundle mainBundle]] 
    forCellReuseIdentifier:@"referenceCell"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"referenceCell"; 

    CustomReferenceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[CustomReferenceTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 

    cell.number.text = @"1"; 
    cell.referenceName.text = @"Name"; 
    cell.reference.text = @"The text of the reference"; 

    return cell; 
} 

这是我的连接图片在inter面对建造者。另外我cellIdentifiers类和厦门国际银行之间的匹配:

enter image description here

我已经看到了这个帖子here,但我似乎仍不能得到它的工作。

帮助将不胜感激。

编辑

这里是表示自定义类的设定的照片。下面是我对tableViewCell初始化器:

enter image description here

这里是标题:

#import <UIKit/UIKit.h> 

@interface CustomReferenceTableViewCell : UITableViewCell 

@property (nonatomic, weak) IBOutlet UILabel *number; 
@property (nonatomic, weak) IBOutlet UILabel *referenceName; 
@property (nonatomic, weak) IBOutlet UILabel *reference; 

@end 

这里是实现:

#import "CustomReferenceTableViewCell.h" 

@implementation CustomReferenceTableViewCell 

- (void)awakeFromNib { 
    // Initialization code 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 
+0

请您可以发布您的代码CustomReferenceTableViewCell初始化 – pbasdf 2014-10-28 11:10:13

+0

我认为'参考',''参考名''和'号'都声明为属性在CustomRefernceTableViewCell.h – pbasdf 2014-10-28 11:19:58

+0

是的。他们都是连接在xib上的IBOutlets。 – pls 2014-10-28 11:23:47

我觉得你的细胞的文件所有者设置到你不应该做你的自定义单元格。该办法把事情工作了自定义单元格是,

  1. 在你的厦门国际银行,有一个表视图细胞成分的填充单元格的内容在其ContentView

  2. 将您的课程CustomReferenceTableViewCell作为该单元格组件的自定义类。

  3. 现在,不要在你的tableview中注册单元格;而不是做在cellForRowAtIndexPath以下时,你的细胞是nil后[tableView dequeueReusableCellWithIdentifier:cellIdentifier];然后注册它:

    cell = [self.tableView dequeueReusableCellWithIdentifier:cellID]; 
    if(cell == nil) { 
        [self.tableView registerNib:[UINib nibWithNibName:[@"CustomReferenceTableViewCell" ] bundle:nil] forCellReuseIdentifier:cellID]; 
        NSArray *nibContents; 
        CustomReferenceTableViewCell *cell; 
        nibContents = [[NSBundle mainBundle] 
            loadNibNamed:nibName owner:self options:NULL]; 
        NSEnumerator *nibEnumerator = [nibContents objectEnumerator]; 
        NSObject *nibItem = nil; 
        while ((nibItem = [nibEnumerator nextObject]) != nil) { 
         if ([nibItem isKindOfClass:[CustomReferenceTableViewCell class]]) { 
          cell = (CustomReferenceTableViewCell *)nibItem; 
         } 
        } 
    } 
    

这种方法已经工作了,我在过去的8个月。我没有理由可能会给你造成问题。

+0

如果我没有将文件所有者设置为自定义视图,则无法挂接我的IBOutlet。 – pls 2014-10-28 12:05:19

+0

“将您的类CustomReferenceTableViewCell作为该单元组件的自定义类。” – avismara 2014-10-28 12:53:14

+0

给了你一个指出我不应该设置文件所有者的+1。 – pls 2014-10-28 14:04:47

尝试设置你的static NSString *cellIdentifier = @"referenceCell";上述@interface And change registerNib place from WillAppear to viewDidLoad。你也可以改变细胞创建

CustomReferenceTableViewCell *cell = (CustomReferenceTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (cell == nil) { 
    cell = [[[NSBundle mainBundle]loadNibNamed:@"CustomReferenceTableViewCell" owner:self options:nil] lastObject]; 
} 
+0

这仍然会产生相同的错误。 – pls 2014-10-28 11:29:41

+0

您在单元格xib中设置重用标识符? – NilsHolgerson 2014-10-28 11:32:39

+0

我相信是的。在CustomReferenceTableViewCell.xib属性下,我已经将它设置为标识符。 – pls 2014-10-28 11:38:19

只要按照我的编码为您的应用程序

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"Reuse"]; 

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

    if(cell == nil) 
    { 
     cell = [nib objectAtIndex:0]; 
    } 

    cell.number.text = @"1"; 

    cell.referenceName.text = @"Name"; 

    cell.reference.text = @"The text of the reference"; 

    return cell; 

    } 
+0

这将起作用。 – user3182143 2014-10-28 11:23:36

+0

尝试此操作时出现以下情况:***因未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在软件包中加载NIB:'NSBundle (已加载)'名称为'referenceCell'' – pls 2014-10-28 11:24:56

+0

Superb.Now在编码中给出refrenceCell而不是CustomCell。 – user3182143 2014-10-28 11:27:48

首先CodingVoldermort的答案帮助我解决了这个问题。我将文件所有者设置为我不想做的自定义类。这应该保留为NSObject。

我认为需要更改的原因是因为我无法通过按住控件并单击占位符下的tableview图像并拖动到xib中的相应视图来挂接我的IBOutlets。

相反,我需要在'显示连接检查器'窗格下并控制并单击并从那里拖动以使连接工作。然后我原来的发布代码将工作。

非常感谢所有的答复家伙。

+0

'[NSBundle mainBundle]'? – avismara 2014-10-28 16:28:40

+0

我的错误。它可以处理你的代码。它一定是别的东西导致它崩溃。我已经接受你的答案。 – pls 2014-10-28 22:49:12