Сохранить случайное число для разных функций в Какао? - PullRequest
1 голос
/ 29 июня 2009

Я знаю, как сделать глобальную переменную, но всякий раз, когда я пытаюсь определить глобальную переменную с помощью функции случайного числа, xcode говорит: «элемент инициализатора не является постоянным» Компилятор не хочет создавать переменную из случайного числа, потому что функция случайного числа не является константой.

Как мне сгенерировать случайное число, а затем использовать одно и то же значение для более чем одного действия? (Например, чтобы определить цвет, а затем записать это значение в метку?)

Код:

#import "Slider_with_IBAppDelegate.h"

float * const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

//^this is where I get the error: "initializer element is not constant"

@synthesize label

//write value to label
- (IBAction) doButton {
label.text = [NSString stringWithFormat:@"%f", hue];
}

//set background color
- (void)applicationDidBecomeActive:(UIApplication*)application
{
self.label5.backgroundColor = [UIColor colorWithHue:hue                        
                                             saturation:1.0                                      
                                             brightness:1.0                                       
                                                  alpha:1.0];
}

---- редактировать ------

Спасибо за предложения. Это все еще не работает для меня, однако, что я делаю неправильно?

Новый код:

#import "Slider_with_IBAppDelegate.h"

float const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

//^I still get the error: "initializer element is not constant."

@synthesize label

//write value to label
- (IBAction) doButton {
label.text = [NSString stringWithFormat:@"%f", hue];
}  
//^this is where I get the error "'hue' undeclared (first use of this function)"

//set background color
- (void)applicationDidBecomeActive:(UIApplication*)application
{

hue = ((arc4random() % ((unsigned)1000 + 1))/1000.0);
/*here I get the error "assignment of read-only variable 'hue.'"  
If I insert "float" just before hue, I do not get this error, 
but it still won't compile because of the error above.*/

self.label5.backgroundColor = [UIColor colorWithHue:hue                        
                                         saturation:1.0                                         
                                         brightness:1.0                                          
                                              alpha:1.0];
}

Ответы [ 3 ]

3 голосов
/ 30 июня 2009

Сделайте его неконстантным и инициализируйте его в applicationDidBecomeActive. Есть ли причина, по которой он должен быть постоянным?

0 голосов
/ 13 июля 2009

Если кому-то интересно, я наконец нашел способ сделать это эффективно. (Я уверен, что это было то, что сказал alltom, я был слишком глуп, чтобы понять.)

Я объявил плавающее и начальное число в моем файле .h:

- (float)generate:(id)sender;
- (void)seed;

И в файле реализации я определил число с плавающей точкой как случайное число и использовал srandom () в качестве генератора случайных чисел.

- (float)generate:(id)sender
{

//Generate a number between 1 and 100 inclusive
int generated;
generated = (random() % 100) + 1;

return(generated);
} 

- (void)seed {
srandom(time(NULL));
}

Тогда где бы я ни хотел сохранить случайное число, я использовал

srandom(time(NULL));
generated1 = ((random() % 100) + 1)/100.0;

для инициации числа, и оттуда я смог использовать генерируемые1, генерируемые2, оттенки и т. Д. В качестве переменных в любой функции, которую я хотел (и я обязательно объявил эти переменные как плавающие в верхней части файла).

0 голосов
/ 30 июня 2009

Я знаю, как сделать глобальную переменную, но всякий раз, когда я пытаюсь определить глобальную переменную с помощью функции случайного числа, xcode говорит «несовместимые типы при инициализации».

float * const hue = ((arc4random() % ((unsigned)100 + 1))/100.0);

Это не функция; это выражение. Я был бы удивлен, если вы не получили здесь ошибку, потому что вы не можете инициализировать глобальную переменную с выражением, которое не является константой. Как говорит alltom.com, вам необходимо присвоить ему значение applicationDidBecomeActive:.

Предупреждение состоит в том, что вы дали переменной тип указателя (float *), но вы не назначаете указатель на нее. Вырежьте звездочку, потому что вы не собираетесь помещать указатель в эту переменную.

Xcode не хочет создавать переменную из случайного числа, потому что функция случайного числа не является постоянной.

Xcode не волнует, так или иначе. Это просто сообщение о выводах компилятора. По умолчанию компилятором для Objective-C является GCC, но XCode поддерживает другие компиляторы (и XCode поставляется с еще одним компилятором C / Objective-C: LLVM-GCC).

… Я не могу назвать то же значение для метки.

Вы не показываете здесь метку, и вы не можете вызвать значение. Вы можете вызвать только функцию, а в показанном коде ее нет.

Это дало мне ошибку "функция не определена: первое использование этой функции" в doButton, даже если она была определена в applicationDidBecomeActive.

Нет, не было. Присвоение переменной не создает функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...