UIImage作为方法返回值

时间:2014-06-27 22:28:22

标签: ios xcode

今天第一次尝试Xcode(5.1.1)。

我正在尝试将图像与表格视图单元格中的UIImageView组件相关联。直接引用图像有效,但是通过方法调用失败:

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

    Person *person = (self.persons)[indexPath.row];

    UILabel *labelName = (UILabel *)[cell viewWithTag:50];
    labelName.text = person.name;

    UIImageView *imageViewPic = (UIImageView *)[cell viewWithTag:51];

    // WORKS OK
    //imageViewPic.image = [UIImage imageNamed:@"ticks"];

    // FAILS (no image in cell)
    //[imageViewPic setImage:[self imageForScore:person.score]];
    imageViewPic.image = [self imageForScore:person.score];

    return cell;
}

-(UIImage *)imageForScore:(int)score
{
    switch (score) {
        case 1: return [UIImage imageNamed:@"tick"];
        case 2: return [UIImage imageNamed:@"cross"];
    }
    return nil;
}

我已确认传入的有效分数为1或2,但单元格中的图片始终为空(通过方法调用)。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果您在调用此方法时确认score确实是12,则问题有两个逻辑来源:

  1. imageNamed的调用失败。它可能失败的原因有几个:

    • 您的捆绑包中是否包含tickcross图片(在“Copy Bundle Resoures”下)?

      bundle contents

      或者如果使用Images.xcassets,图像是否存在?

      无论哪种方式,请确认图像名称的大小写。

    • 您没有提供扩展程序。如果从捆绑资源(但不是Images.xcassets)加载它,则必须指定扩展名,如果该文件不是PNG文件(例如,如果它是JPEG文件)。如果不使用Images.xcassets,请尝试指定扩展程序。

  2. 另一方面,如果您确认imageForScore正在返回有效的UIImage,则可能需要确认imageViewPic是否正确。

    • imageViewPic本身可能是nil(可能未找到标记为51的子视图)。

    • 我可能还建议您确认imageViewPic的其他属性(例如frame有效,hidden标志未开启等)。

答案 1 :(得分:0)

请忽略 - 发现错误!文件名不匹配(ticks.png和cros.png)!