我正在开发一款iPhone应用程序,并正在使用xCode进行“构建和分析”。我收到消息“接收器在expresseion中是一个垃圾值”,指向我下面的返回行的行:
-(UIColor*)getLevelColor{
UIColor* tempCol;
if (level==4) {
tempCol= [[UIColor alloc] initWithRed:0.39f green:0.82f blue:0.32f alpha:1.0f];
}else if (level==5) {
tempCol= [[UIColor alloc] initWithRed:0.61f green:0.68f blue:0.83f alpha:1.0f];
}else if (level==6) {
tempCol= [[UIColor alloc] initWithRed:0.90f green:0.68f blue:0.99f alpha:1.0f];
}else if (level==7) {
tempCol= [[UIColor alloc] initWithRed:0.68f green:0.97f blue:0.99f alpha:1.0f];
}
return [tempCol autorelease];
}
为什么我得到这个以及如何修复它以便我得不到消息?
提前致谢!
尼古拉斯
答案 0 :(得分:4)
我猜测编译器发现有一个代码路径返回一个未初始化的值并给你新闻:tempCol
是一个未初始化的值,除非level
不是4,5 ,6或7.如果您确定level
永远不会超过4,5,6或7,那么在if-ladder的末尾添加else { return 0; }
。
PS:如果必须与一系列常量值进行比较,则应使用switch(){}
语句,这通常更快,更容易维护(恕我直言)。或者,您可以将RGBA值放在使用level
索引的数组中。
(免责声明:我不做Objective-C。没有人应该这样做)