更新:我决定重新开始,因为我仍处于此应用的早期阶段。我重复了一切,无论出于何种原因,自定义单元格第二次进行。我将保留旧文件以确认另一个答案,因为我想我不是唯一会遇到此问题的人。
我正在构建一个标签式应用程序,它在表视图中需要自定义单元格。我已经做了几次这样的事情,在连接这些自定义单元格时,我似乎总是碰到一个减速带。应用程序启动正常,直到我开始在名为SongsTVC的表视图控制器中使用自定义单元格。我收到终止的原因是:
[<SongsTVC 0x6831330> setValue:forUndefinedKey:]:
this class is not key value coding-compliant for the key albumLabel.
我正在使用this tutorial并且之前已经使用过它(为ARC和iOS 5更改了一些内容)并取得了成功。事实上,我使用的代码和IB布局是基于我已经在工作的项目。我知道当你将你的出口连接到文件的所有者而不是单元本身时,这个错误通常会出现。我没有犯这个错误,但它仍然给我这个错误。到目前为止,我已经删除了它有问题的标签,甚至完全删除了单元格的文件以便重新开始。任何帮助,将不胜感激。
SongCell.h
#import <UIKit/UIKit.h>
@interface SongCell : UITableViewCell{
}
@property(nonatomic, assign) IBOutlet UILabel *titleLabel;
@property(nonatomic, assign) IBOutlet UILabel *artistLabel;
@property(nonatomic, assign) IBOutlet UILabel *albumLabel;
@end
SongCell.m
#import "SongCell.h"
@interface SongCell ()
@end
@implementation SongCell
@synthesize titleLabel, artistLabel, albumLabel;
@end
SongsTVC.h - TableViewController的标题
#import <UIKit/UIKit.h>
@interface SongsTVC : UITableViewController{
UINib *cellLoader;
}
@end
歌曲TVC.m - 相关的TableViewController方法
#import "SongsTVC.h"
#import "SongCell.h"
@interface SongsTVC ()
@end
static NSString *CellClassName = @"SongCell";
@implementation SongsTVC
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
cellLoader = [UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]];
}
return self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
SongCell *cell = (SongCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
if (!cell)
{
//CRASH ERROR POINTS HERE
NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
cell = [topLevelItems objectAtIndex:0];
}
// Configure the cell...
cell.titleLabel.text = @"SONG";
cell.artistLabel.text = @"Artist";
cell.albumLabel.text = @"Album";
return cell;
}
界面生成器
注意:单元标识符已在IB中设置为“SongCell”,文件所有者为UITableViewController,因为多个表将使用此单元格。只要视图是一个表,它应该工作(它在过去)。
更新:XML格式的xib文件为pasted here.
答案 0 :(得分:2)
我今天遇到了这个问题,同时为另一个SO答案做了一个示例项目!看起来您的xib正在尝试将插座连接到视图控制器而不是您的单元。在您的屏幕截图中,出口看起来正确定义,但有时旧的出口定义可能会留在底层XML中并导致此类崩溃。
例如,如果在连接某些插座后更改了文件所有者类,则可能会使其混淆。
您可以通过打开xib作为“源代码”找到它,查找元素并检查是否只有您期望的条目。也许在XML文件中搜索albumLabel
。
如果这不起作用,您可能需要废弃xib并重新开始。
答案 1 :(得分:1)
不幸的是,我发现的唯一解决方案是重新开始。我完全像以前一样做了所有事情,并且第二次工作。这是一件非常繁琐的事情,不得不废弃整件事并重新开始,但这是我能让它发挥作用的唯一方法。除非有人能弄清楚发生了什么,否则我将其作为答案。 (见原帖及其更新)
答案 2 :(得分:0)
我有一个类似的问题,并且能够通过重建Storyboard / NIB来解决它。