解决有关自定义单元格的编译时错误

时间:2013-01-30 04:24:12

标签: ios objective-c viewcontroller iboutlet outlet

我正在iOS 6中编写应用程序。 这是来自ViewController.m文件的代码片段:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCellIdentifier"];

    if (cell == nil) {

        [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];

        cell = _customCell;
        _customCell = nil;

    }

    cell.firstName.textLabel = @"dsdsds";
    cell.middleName.textLabel = @"N/A";
    cell.lastName.textLabel = @"daasdsdasa";

    return cell;
}

这些代码行给了我错误(Property 'firstName' not found on object of type 'CustomCell*'):

cell.firstName.textLabel = @"dsdsds";
        cell.middleName.textLabel = @"N/A";
        cell.lastName.textLabel = @"daasdsdasa";

CustomeCell.h:

#import <UIKit/UIKit.h>


@interface CustomCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *firstName;

@property (strong, nonatomic) IBOutlet UILabel *middleName;
@property (strong, nonatomic) IBOutlet UILabel *lastName;

+(NSString*) reuseIdentifier;
@end

In the Outlets of CustomCell.xib:
firstName -> label
middleName -> label
lastName -> label

Referencing Outlets:
customCell -> File's Owner

Selecting the firstName label:
Referencing Outlets:
firstName -> CustomCell
firstName -> CustomCell -CustomCellIdentifier

Selecting the middleName label:
lastName -> Custom Cell - CustomCellIdentifier
middleName -> Custom Cell

Selecting the lastName label:
lastName -> Custom Cell
middleName -> Custom Cell- Custom Cell Identifier

那么,问题是什么?在我看来,这与奥特莱斯有关。

3 个答案:

答案 0 :(得分:1)

错误(Property 'firstName' not found on object of type 'CustomCell*'):表示编译器不知道名称为firstName的属性。您需要通知编译器类中可用的属性,通常是通过导入头文件。

因此,在表视图代码所在文件的顶部,放置:

#import "CustomCell.h"

(请注意,它会在@implementation阻止之前,而在其他#import之后。

答案 1 :(得分:1)

我在你的代码中看到了一些错误:

cell.firstName.textLabel = @"dsdsds";
cell.middleName.textLabel = @"N/A";
cell.lastName.textLabel = @"daasdsdasa";

问题是UILabel没有像textLabel这样的属性。

将其更改为:

cell.firstName.text  = @"dsdsds";
cell.middleName.text = @"N/A";
cell.lastName.text   = @"daasdsdasa";

如果您没有合成该属性,请使用以下代码:

cell._firstName.text  = @"dsdsds";
cell._middleName.text = @"N/A";
cell._lastName.text   = @"daasdsdasa";

同样改变:

if (cell == nil) {

        [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
}

if (cell == nil) {
         NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = (CustomCell *)[nib objectAtIndex:0];
}

答案 2 :(得分:0)

为什么你的.h文件中有类方法+reuseIdentifier?您继承的UITableViewCell类具有该名称的属性,因此有点令人困惑。

此外,惯例是对您的网点使用“弱”:@property (weak, nonatomic) IBOutlet UILabel *firstName;,因为该视图将包含其子视图的强大副本。

我不确定为什么你的财产没有找到。这是一个运行时错误。如果没有正确连接笔尖的东西;一旦尝试实例化该视图,就会遇到异常。您是否将该视图的“类”设置为CustomCell? (虽然如果你不这样做,你应该将一个普通的TableViewCell出列,并且无法设置你的插座,所以......)嗯。