31

首先,这个讨论并没有解决我的问题。

自定义 UITableViewCell 子类:该类不符合键值编码

设置:

我有一个 Person 对象数组MainViewController。想要显示 in 中的UITableView对象AllContactsViewController

问题:

使用默认值时,一切都按预期工作UITableViewCell。当我使用我的自定义时TableCell,我收到一个错误,指出这个类不符合键值编码。

在我将我的三个outletsIB的任何一个连接到我的TableCell班级后,立即发生此错误。

笔记:

TableCell具有三个属性: a name& emaillabel + imageView

希望你能帮忙。

表格单元格.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

表格单元格.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
4

6 回答 6

67

如果您要连接文件所有者的插座,您应该做不同的事情:

1 - 将 UITableViewCell 的类定义为您的 TableCell 类:

在此处输入图像描述

2 - 连接不是来自文件所有者的插座,而是来自对象列表中的 TableCell:

连接插座

于 2012-08-16T11:04:35.007 回答
4

一切都在我的项目中完成,并且在尝试使用自定义单元格及其属性时仍然收到。这是我如何解决我的问题。

CustomUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomUITableViewCell" forIndexPath:indexPath];

真正击中我的只是CustomUITableViewCell从自定义单元格的“身份检查器”中删除类并重新输入它..你会看到一个变化

  1. 模块值
  2. 从目标继承模块

让它们成为自动出现的值...不要尝试继承它或更改继承或模块值...

在此处输入图像描述

于 2020-10-12T13:15:57.253 回答
2

如果您使用的是 Xcode 6 GM,则 IB 中存在可能导致此错误的错误。我不认为 OP 有这个问题,因为它更明显(你可以在日志中看到“未定义的类 MyXXXCell”)但是因为你像我一样从谷歌得到这个问题,只需尝试在 IB 中输入类名然后再次按回车键,一旦它真正保存在 storyboard/xml 文件中就可以了。

于 2014-09-30T05:40:31.297 回答
1

我遇到了同样的问题,这里或其他讨论中的任何评论都对我有帮助……最后我做了一个干净的原因,我很确定我做的一切都是正确的,是的……神奇地工作!

于 2015-07-07T10:20:44.900 回答
0

在 Git 合并并解决了一些冲突之后,这发生在我身上。它搞砸了我的 XCode 项目。

我尝试了整个 StackOverflow。起初我以为我的自定义类 .m 文件尚未添加到编译源类列表中。但这是一种情况,但是即使添加了它,它也给了我同样的问题。

我是如何解决的:

  1. 我保留了我的 .xib 文件及其支持的自定义类 .m 和 .h 文件的备份。
  2. 然后清理项目并尝试通过 XCode 运行应用程序(这可能不起作用)
  3. 然后将文件重新添加回 XCode 项目,它将起作用。

干杯!

于 2016-08-05T08:19:19.643 回答
0

使用 Xcode 12 也有同样的问题。它只需在 Identity Inspector 上重新键入类即可。似乎是一个错误。

于 2021-09-09T18:05:19.813 回答