今天第一次尝试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,但单元格中的图片始终为空(通过方法调用)。
我错过了什么?
答案 0 :(得分:0)
如果您在调用此方法时确认score
确实是1
或2
,则问题有两个逻辑来源:
对imageNamed
的调用失败。它可能失败的原因有几个:
您的捆绑包中是否包含tick
和cross
图片(在“Copy Bundle Resoures”下)?
或者如果使用Images.xcassets
,图像是否存在?
无论哪种方式,请确认图像名称的大小写。
您没有提供扩展程序。如果从捆绑资源(但不是Images.xcassets
)加载它,则必须指定扩展名,如果该文件不是PNG文件(例如,如果它是JPEG文件)。如果不使用Images.xcassets
,请尝试指定扩展程序。
另一方面,如果您确认imageForScore
正在返回有效的UIImage
,则可能需要确认imageViewPic
是否正确。
imageViewPic
本身可能是nil
(可能未找到标记为51
的子视图)。
我可能还建议您确认imageViewPic
的其他属性(例如frame
有效,hidden
标志未开启等)。
答案 1 :(得分:0)
请忽略 - 发现错误!文件名不匹配(ticks.png和cros.png)!