Изменить значение переменной из NSTimer - PullRequest
0 голосов
/ 05 октября 2011

Я новичок в Какао / Цель C. Мне нужно менять значение глобальной переменной NSSTring на каждой итерации выполнения NSTimer. Я объявил переменную внутри appdelegate.m в верхней части файла, чтобы она была глобальной:

NSString *my_string = @"hello";

Я звоню NSTimer:

[[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(scan:) userInfo:nil repeats:YES] fire];

и при внутреннем сканировании я установил новое значение на my_string:

- (void) scan:(NSTimer *)timer{
    //some execution
    my_string = @"the new value";
}

но значение переменной всегда одинаково "привет", содержимое не изменится. Можно ли сделать это? Решения?

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Если вы объявите свою переменную my_string в файле .m, другие файлы не смогут ее увидеть (вы импортируете файлы .h, а не .m).Делаете ли вы таймер в одном и том же файле (appdelegate.m)?

Я рекомендую не использовать глобальные переменные, подобные этой, поскольку это часто приводит к путанице в процессе создания проекта.Вы можете иметь его в виде ивара с аксессором или статического в блоке @implementation со статическим аксессором, чтобы иметь доступ к уникальному экземпляру из любого места.

Вы можете внести изменения, чтобы сделатьубедитесь, что это произошло, или установите точку останова.

- (void) scan:(NSTimer *)timer{
    //some execution
    my_string = @"the new value";
    NSLog(@"Changed my_string to %@", my_string);
}
0 голосов
/ 05 октября 2011

Вам не нужно вызывать метод пожара, таймер по расписанию сработает автоматически после указанного интервала.

Кроме того, установите точку останова при сканировании: метод, чтобы узнать, вызывается ли он.

...