Генерация случайных цветов на iPhone 5S

У меня есть следующий код для генерации случайного цвета (задача C):

- (UIColor*) randomColor
{
    return [UIColor colorWithRed:(arc4random_uniform(255) / 255.0) green:
           (arc4random_uniform(255) / 255.0) 
           blue:(arc4random_uniform(255) / 255.0) alpha:1];
}

Он работал так, как предполагалось, во всех моих симуляциях. Однако теперь, когда он разослан некоторым тестерам, для людей с iPhone 5S он всегда отображается черным цветом (0, 0, 0). Не происходит ни для друга с 5C, ни для пары друзей с 4S. Я понятия не имею, как определить эту ошибку. Кто-нибудь знает, почему это может быть?

Редактировать: один тестер с iPhone 6 подтвердил ту же проблему, поэтому я полагаю, что версия не актуальна. Тем не менее, он все еще работает нормально для других.


person Connor Neville    schedule 02.11.2014    source источник


Ответы (1)


Поскольку вы хотите сгенерировать случайное число от 0 до 1, вы должны использовать drand48() вместо arc4random_uniform()

- (UIColor*) randomColor
{
    return [UIColor colorWithRed:drand48() green:drand48() blue:drand48() alpha:1];
}
person Peter Foti    schedule 02.11.2014
comment
Пожалуйста, OP, не могли бы вы ответить, как все прошло с этим решением? Я создал образец проекта и получил 5 раз один и тот же зеленоватый цвет (на симуляторе). - person Marcos Griselli; 03.11.2014
comment
Я использовал это изменение и повторно отправил свое приложение. В симуляциях этот способ работает (но до этого мой код работал и в симуляциях). Я отвечу через несколько дней, если мое приложение пройдет и этот код поможет. Однако, если вы получаете зеленоватый (не черный) цвет, у вас может быть другая проблема, чем у меня. - person Connor Neville; 03.11.2014
comment
Хорошо, пожалуйста, ответьте, когда вернутся тесты, чтобы я знал, что это работает на реальных устройствах. - person Marcos Griselli; 03.11.2014
comment
Хотя использование drand48 может быть хорошим способом получить значение от 0 до 1, в коде OP не должно быть ничего плохого. Почему arc4random_uniform(255) / 255.0 дает только 0 на 64-битных устройствах? - person rmaddy; 03.11.2014
comment
Та же проблема. Все еще не происходит на симуляциях. - person Connor Neville; 04.11.2014