2

更新:我决定重新开始,因为我还处于这个应用程序的早期阶段。我重复了所有内容,无论出于何种原因,自定义单元格都进行了第二次。我将保留旧文件以确认另一个答案,因为我想我不是唯一会遇到此问题的人。

我正在构建一个需要在其表格视图中自定义单元格的选项卡式应用程序。我已经这样做了几次,在连接这些自定义单元时,我似乎总是遇到减速带。该应用程序启动良好,直到我开始在我的表格视图控制器中使用名为 SongsTVC 的自定义单元格。我收到终止合同的原因是:

[<SongsTVC 0x6831330> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key albumLabel.

我正在使用本教程,并且之前已经成功使用过它(为 ARC 和 iOS 5 更改了一些内容)。事实上,我使用的代码和 IB 布局是基于我已经在工作的项目。我知道当您将插座连接到文件所有者而不是单元格本身时,通常会出现此错误。我没有犯这个错误,但它仍然给我这个错误。到目前为止,我已经删除了它有问题的标签,甚至完全删除了单元格的文件以便重新开始。任何帮助,将不胜感激。

宋细胞.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

SongsTVC.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 文件已粘贴到此处。

4

3 回答 3

2

I had this exact problem today, while making a sample project for another SO answer! It looks like your xib is trying to connect an outlet to your view controller instead of your cell. In your screenshot, the outlets look correctly defined, but occasionally an old outlet definition can get left in the underlying XML and cause this type of crash.

If you've changed the files owner class after connecting some outlets, for example, this could confuse it.

You may be able to find it by opening the xib as "source code", look for the element and check there are only the entries you expect. Perhaps search the XML file for albumLabel as well.

If that doesn't work, you may have to scrap the xib and start again.

于 2012-05-22T17:41:36.317 回答
1

不幸的是,我找到的唯一解决方案是重新开始。我做的一切都和以前完全一样,第二次就成功了。不得不放弃整个事情并重新开始是一件很麻烦的事,但这是我让它工作的唯一方法。除非有人能弄清楚发生了什么,否则我将把它作为答案。(见原帖及其更新)

于 2012-06-03T19:33:12.147 回答
0

我有一个类似的问题,并且能够通过重建 Storyboard/NIB 来解决它。

于 2013-10-27T19:06:22.350 回答