在我的cellForRowAtIndexPath:
方法中,我试图将按钮的tag
设置为等于indexPath.row
。但是,按钮为nil
,因此tag
为nil
。
有人知道为什么吗?这是我在视图控制器单元中创建的按钮。
编辑:我的postCell不为零。只有与单元格关联的按钮为nil 和 我试图在VolunteerOpportunityCell中分配并初始化收藏夹按钮,特别是在awakeFromNib方法中。但这不允许我调用alloc方法。
答案 0 :(得分:1)
您不应致电dequeueReusableCellWithIdentifier
。它可以返回nil
,在这种情况下,您的postCell
是nil
,与此相关的所有内容都是nil
。您不会检查它是否为零,因此您显然不了解有关dequeueReusableCellWithIdentifier
的工作原理。但这没关系,因为您不应该首先调用它。
请致电dequeueReusableCellWithIdentifier:forIndexPath:
。它永远不会是nil
。它将提供一个单元,现在您将有机会配置该单元。
答案 1 :(得分:0)
首先,检查您的reuse id
,以查看注册的reuse id
是否为@"postCell"
。如果是这样,请确保正确分配了favoritedButton
。也就是说,如果单元是从.xib文件初始化的,则检查连接;如果不是,请检查favoritedButton
的创建位置。
答案 2 :(得分:0)
第一点,请检查如何创建此VolunteerOpportunityCell
类。当然,在Objective-C中,有两种.xib文件或手写代码的方法。因此,您应该在加载方法上知道两者的不同。 />
我创建一个测试项目以确认我的答案。
我认为您可以使用.xib文件创建此favoriteButton
。您可以执行此操作。
VoulunteerOpportunityCell *postCell = (VoulunteerOpportunityCell *)[tableView dequeueReusableCellWithIdentifier:@"postCell"];
if (postCell == nil) {
postCell = [[VoulunteerOpportunityCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"postCell"];
NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"VoulunteerOpportunityCell" owner:self options:nil];
postCell = (VoulunteerOpportunityCell *)[nib objectAtIndex:0];
}
postCell.tag = indexPath.row;
postCell.favoritedButton.tag = indexPath.row;
NSLog(@"indexPath.row-%ld,post.tag:%ld",indexPath.row,postCell.favoritedButton.tag);
因此您可以粘贴我的代码以尝试一下!
如果使用手写代码,则必须在favoritedButton
中初始化VoulunteerOpportunityCell