Как проверить, изменилась ли переменная каждую секунду или меньше в задаче c? - PullRequest
2 голосов
/ 04 мая 2010

Я использую оператор if для проверки значения BOOLEAN, когда я нажимаю на кнопку. Когда кнопка нажата, если значение равно false, я хочу отобразить UIActivityIndicator, а если значение равно true, я хочу открыть новое представление. Я могу сделать это хорошо, но я хочу, чтобы представление автоматически менялось, когда BOOLEAN становится истинным, если пользователь уже нажал кнопку.

Итак, мой вопрос: как проверить, изменилось ли значение каждую секунду или меньше?

Ответы [ 3 ]

12 голосов
/ 04 мая 2010

Просмотр KVO - Наблюдение значения ключа - для запуска действия, когда переменная меняет свое значение.

В методе -viewWillAppear: вашего контроллера представления, например, добавьте наблюдателя:

[self addObserver:self forKeyPath:@"myBoolean" options:NSKeyValueObservingOptionNew context:nil];

В вашем -viewWillDisappear: методе отмените регистрацию наблюдателя:

[self removeObserver:self forKeyPath:@"myBoolean"];

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

Наконец, настройте метод наблюдателя, чтобы он что-то делал при изменении на myBoolean:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqual:@"myBoolean"]) { 
        // The BOOL value of myBoolean changed, so do something here, like check
        // what the new BOOL value is, and then turn the indicator view on or off
    }
}

Шаблон наблюдения значения ключа является хорошим общим способом инициирования чего-либо, когда значение объекта где-то изменяется. Apple написала хороший «быстрый старт» документ , который вводит эту тему.

1 голос
/ 04 мая 2010

Посмотрите Наблюдение значения ключа (часто называемое просто KVO). Он использует динамические интроспективные возможности языка, чтобы реализовать именно эту функцию для вас.

0 голосов
/ 04 мая 2010

Я думаю, вы хотите посмотреть на Наблюдательский паттерн .

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