设置原型单元标识符时,故事板编译失败

时间:2013-12-17 16:14:15

标签: ios iphone objective-c uitableview

我遇到了一个问题,每当我在TableView中设置原型单元的标识符时,Storyboard都无法编译。我认为我已经做好了一切,扩展了UITableViewCell并在该类中创建了IBOutlets,为我的TableView创建了一个DataSource和Delegate,并实现了必要的方法,以及所有方法。

我的手机有4个UIImages,8个UILabels和1个UIButton。当我全部删除它们时,故事板会使用标识符进行编译。但它不是那些组件存在的。令人惊讶的是,它编译了这四个中的两个UIImages,并且不会编译其他任何东西。此外,如果我删除了为IBOutlets创建的所有UI项目,它也不会失败。一旦它们全部被删除,那些没有IBOutlets的东西就会显示在表中,但是执行不会进入VenueCardCell类。

我注意到失败并不取决于我VenueCardCell类的存在。即使该类不存在,它也会失败。

在所有情况下,当我没有为原型单元格设置标识符时,所有内容都会编译。但是表格中没有任何内容。事实上,即使它编译,表格中也没有任何内容。

我不明白我在这里做错了什么。请帮忙!如果您需要在此处查看其他任何内容,请与我们联系。

这是我的课程UITableViewCell

@interface VenueCardCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *vImage;
@property (weak, nonatomic) IBOutlet UIButton *favoriteButton;
@property (weak, nonatomic) IBOutlet UILabel *vnLabel;
@property (weak, nonatomic) IBOutlet UILabel *vaLabel;
@property (weak, nonatomic) IBOutlet UILabel *vdLabel;
@property (weak, nonatomic) IBOutlet UILabel *waitLabel;
@property (weak, nonatomic) IBOutlet UILabel *rwaitLabel;
@property (weak, nonatomic) IBOutlet UILabel *ratioLabel;
@property (weak, nonatomic) IBOutlet UILabel *fLabel;

@end

@implementation VenueCardCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

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

    // Configure the view for the selected state
}

@end

这是我的ViewController类 - (为简单起见,我已经硬编码了一些值,因此我只能看到相同的单元格10次)

@interface HomeViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation HomeViewController

static NSString *CellIdentifier = @"VenueCard";

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger numberOfRows = 10;
    return numberOfRows;
}

- (VenueCardCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView registerClass:[VenueCardCell class] forCellReuseIdentifier:CellIdentifier];
    VenueCardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    return cell;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

1 个答案:

答案 0 :(得分:2)

好的,我发现了问题。几个小时前,当我创建ViewController时,我已将Cell中的IBOutlets添加到ViewController中。当然,这不会有效,所以我删除了类中的插座,认为Xcode会自动删除故事板中的引用。不幸的是,这不会发生。我整晚都在弄清楚出了什么问题。删除这些引用后,一切正常。现在我感觉很蠢。