在 customtableviewcell 中加载并设置其 IBOUTLETS 时请求成员错误
Posted
技术标签:
【中文标题】在 customtableviewcell 中加载并设置其 IBOUTLETS 时请求成员错误【英文标题】:request for member error when loading in customtableviewcell and setting its IBOUTLETS 【发布时间】:2011-05-13 13:12:50 【问题描述】:过去 3 个小时我一直在摸索这个问题,因为一切似乎都是正确的,除了我无法通过我的 tableviewcell 类在我的自定义单元格中设置 uilabels。
这是我的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"TableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
cell = (UITableViewCell *)[nib objectAtIndex:0];
//cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
//cell.imageViewSection =
// Set up the cell
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString *textTitle = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
NSURL *imageurl = [NSURL URLWithString:[[stories objectAtIndex: storyIndex] objectForKey: @"description"]];
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:imageurl]];
cell.imageViewSection = image;
cell.titleLabelText.text = textTitle;
return cell;
如果有人可以帮助我,那就太棒了:)
【问题讨论】:
【参考方案1】:您不应依赖单元格始终作为数组中索引 0 处的对象返回。做一个简单的循环来找到实际的单元格。
并为您使用的单元格子类添加类型转换
-(UITableViewCell*)tableView:(UITableView*)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexPath
static NSString* cellID = @"cellID";
MyCell* cell = (id)[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell"
owner:self
options:nil];
for (cell in nib)
if ([cell isKindOfClass:[MyCell class]])
break;
// Safely do tuff to cell
return cell;
这个 sn-p 假设单元格至少是可用的,如果没有返回表格视图单元格的行为是未定义的。
【讨论】:
感谢您的提醒。我在名为 TableViewCell 的 tableviewcell 类中设置 iboutlets。当谈到使用 cell.imageViewSection.image = image 自定义单元格时,我收到了对成员的请求,而不是结构或联合......一旦对象被初始化,我应该能够设置它的值...... @MrPink - 啊,那是因为UITableViewCell
没有您尝试设置的属性。您需要进行类型转换。我扩展我的答案。你对 Reservoir Gods 的 MrPink 有什么改变吗?
@MrPink - 还考虑使用UINib
实例来创建单元格。想法是一样的,但是UINib
允许将 nib 文件缓存在内存中以便更快地创建。
我确实是水库犬的粉红先生!并感谢您的帮助,让我明白了这一点!
@MrPink - 很高兴,我是你在 Atari Falcon 上的作品的粉丝。【参考方案2】:
您正在分配 TableViewCell 并将其转换为 UITableViewCell 变量,而 UITableViewCell 没有这些出口。相反,您应该执行以下操作..
TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
cell = (TableViewCell *)[nib objectAtIndex:0];
【讨论】:
以上是关于在 customtableviewcell 中加载并设置其 IBOUTLETS 时请求成员错误的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Visual C++ 中加载 SQL 驱动程序(但在 QtCreator 中加载)