我在这里疯了。
我有一个应该返回浮点数的函数:
- (float) getHue:(UIColor *)original
{
NSLog(@"getHue");
const CGFloat *componentColors = CGColorGetComponents(original.CGColor);
float red = componentColors[0];
float green = componentColors[1];
float blue = componentColors[2];
float h = 0.0f;
float maxChannel = fmax(red, fmax(green, blue));
float minChannel = fmin(red, fmin(green, blue));
if (maxChannel == minChannel)
h = 0.0f;
else if (maxChannel == red)
h = 0.166667f * (green - blue) / (maxChannel - minChannel) + 0.000000f;
else if (maxChannel == green)
h = 0.166667f * (blue - red) / (maxChannel - minChannel) + 0.333333f;
else if (maxChannel == blue)
h = 0.166667f * (red - green) / (maxChannel - minChannel) + 0.666667f;
else
h = 0.0f;
if (h < 0.0f)
h += 1.0f;
NSLog(@"getHue results: %f", h);
return h;
}
NSLog将正确跟踪它(即:0.005),但该函数的实际返回值为NULL。
我尝试过多种方式获得这种价值,但它永远不会奏效。
float originalHue = [self getHue:original];
导致构建错误,因为它说:“初始化中的不兼容类型”
float *originalHue = [self getHue:original];
导致空值返回。
我尝试过其他方法,但它实际上从未真正获得价值。
有什么想法吗?
干杯队员, 安德烈
答案 0 :(得分:5)
您是否已在班级界面中声明了您的方法?如果是这样,您是否每次发生事故都表明有不同的返回值(例如id
)?
如果未在您的接口中声明它,编译器会将返回值视为id
,因此您需要在接口中声明它或将返回值强制转换为float
。 / p>
答案 1 :(得分:3)
我使用了您的代码但没有发现任何问题。它对我来说很好。只需清理一次你的应用程序。上面的代码将工作正常,直到 h = 0.0005如果超出值0.0005那是0.00005或更多,那么你将获得无限值。因此,请检查它并进行必要的更改,例如使用double / long。
答案 2 :(得分:0)
我的代码可以正常使用它来调用它:
UIColor *aColor = [UIColor colorWithRed:0.3 green:0.1 blue:0.5 alpha:1.0];
float theHue = [self getHue:aColor];
NSLog(@"Float: %f", theHue);
返回:
2010-04-07 11:49:33.242 Floating[8888:207] getHue
2010-04-07 11:49:33.243 Floating[8888:207] getHue results: 0.750000
2010-04-07 11:49:33.243 Floating[8888:207] Float: 0.750000
答案 3 :(得分:0)
这恰好发生在我身上。但事实证明,我在类方法中引用了一个你不应该做的实例方法。
基本上我错误做的是:
+(int) someMethod {
// stuff
[self otherMethod];
}
-(int) otherMethod {
// do something
}
所以请检查(不是在OP的情况下,但如果你有类似的错误),如果这是问题。