Ваша проблема в том, что метод 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]?@"YES":@"NO");
NSLog(@"Valid green scan: %@", [scanner scanFloat:&green]?@"YES":@"NO");
NSLog(@"Valid blue scan: %@", [scanner scanFloat:&blue]?@"YES":@"NO");
return [UIColor colorWithRed:red green:green blue:blue alpha:1];