2010-04-16 47 views
0

我试图建立从一个逗号分隔的RGB,这是“0.45,0.53,0.65”值的列表中的UIColor,这里由colorConfig对象表示...NSScanner scanFloat返回意想不到的结果

NSScanner *scanner = [NSScanner scannerWithString:colorConfig]; 
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"\n, "]]; 
float red, green, blue; 
return [UIColor colorWithRed:[scanner scanFloat:&red] green:[scanner scanFloat:&green] blue:[scanner scanFloat:&blue] alpha:1]; 

但是我的颜色总是像黑色一样回来。所以我将这些值记录到我的控制台,我看到红色= -1.988804,绿色= -1.988800,蓝色= -1.988796

我在做什么错?

+0

如何colorConfig定义? – jrtc27 2010-04-16 17:02:38

+0

这是一个NSString,值为“0.45,0.53,0.65” – 2010-04-16 17:03:33

回答

3

你的问题是scanFloat:方法不返回一个浮点数。它返回一个BOOL,告诉你扫描器是否实际读取一个浮点数(例如,如果你关心对你的colorConfig字符串进行任何验证)。相反,scanFloat:方法读取您提供的变量(在本例中为红色,绿色和蓝色)的浮点数。当你记录这些变量时,你会阅读垃圾,因为它们在堆栈上,并且会带上任何垃圾,因为你没有初始化它们。

使用你所拥有的,这实际上应该返回一个颜色和日志如果扫描是有效的:

NSScanner *scanner = [NSScanner scannerWithString:colorConfig]; 
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"\n, "]]; 
float red, green, blue; 
NSLog(@"Valid red scan: %@", [scanner scanFloat:&red][email protected]"YES":@"NO"); 
NSLog(@"Valid green scan: %@", [scanner scanFloat:&green][email protected]"YES":@"NO"); 
NSLog(@"Valid blue scan: %@", [scanner scanFloat:&blue][email protected]"YES":@"NO"); 
return [UIColor colorWithRed:red green:green blue:blue alpha:1]; 
+0

就在!谢谢。 – 2010-04-16 17:13:24