在 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 时请求成员错误的主要内容,如果未能解决你的问题,请参考以下文章

webview 正在模拟器中加载,但未在设备中加载

无法在 Visual C++ 中加载 SQL 驱动程序(但在 QtCreator 中加载)

存储桶策略后 PDF 文件不会在 Chrome 中加载(在其他浏览器中加载)

在 Javascript 中加载 XML 数据时出错

在 Handsontable 单元格中加载数组

网页在模拟器的 safari mac safari 中加载,但未在 webView iOS obj C 中加载