iOS (цель C) версия ualarm () - PullRequest
       3

iOS (цель C) версия ualarm ()

1 голос
/ 19 сентября 2011

Я ищу функцию Objective C для вызова функции для обновления пользовательского интерфейса через указанный интервал (от 2 до 5 секунд).Что-то, что можно использовать (примерно), например, такой псевдокод:

array[String];   // already populated

function1(){
    if (array.hasMoreElements()){
        call function2() in x seconds;
    }
}

void function2(){
    update gui with next string in the array;
    function1();
}

Я просто не могу использовать sleep () в течение x секунд, потому что графический интерфейс пользователя перестает отвечать;и я не могу создать новый поток для обновления GUI, потому что элементы интерфейса iOS не являются потокобезопасными.

Я исследовал ualarm (), но он старый и очень грубый, и кто-то сказал мне, что тампохожая утилита в библиотеке iOS;однако я не смог его найти.

Ответы [ 2 ]

5 голосов
/ 19 сентября 2011

Вы говорите об Obj-C, но пишете что-то вроде псевдокода C. Если вы действительно пишете обычный Obj-C, -performSelector:withObject:afterDelay - это то общее семейство, которое вам нужно, и оно здесь. (Вы можете использовать «блоки» на iOS 4.x и выше). Например, в вашем случае использования:

- (void)displayNextString
{
    if ([strings count] > 0) {
        [self updateUIwithString:[strings objectAtIndex:0]];
        [strings removeObjectAtIndex:0];
        [self performSelector:@selector(displayNextString) withObject:nil afterDelay:2.0];
    }
}
3 голосов
/ 19 сентября 2011

Вы можете использовать NSTimer .Этот API идеально подходит для того, что вы хотите сделать.

Вы можете просто определить метод, например

-(void)updateUI {
     //update interface 
}

, а затем сделать что-то вроде

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(updateUI) userInfo:nil repeats:YES];

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

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