2010-05-25 3 views
1

Я пишу программу-цель, которая выполняет некоторые вычисления на основе времени и в конечном итоге обновляет UILabels каждую секунду.Где я должен помещать код, который должен срабатывать ПОСЛЕ загрузки?

Чтобы объяснить концепцию, приведено несколько упрощенных кодов, которые я поместил в viewDidLoad класса, который обрабатывает представление.

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // how do i make this stuff happen AFTER the view has loaded?? 
    int a = 1; 
    while (a < 10) { 
     NSLog(@"doing something"); 
     a = a + 1; 
     sleep(1); 
    }  
} 

Моя проблема заключается в том, что код останавливает загрузку зрения, пока петля не все полные (в данном случае 10 секунд).

Куда мне поместить код, который я хочу запустить ПОСЛЕ завершения загрузки?

новичок вопрос, который я знаю =/

ответ

1

Что вам нужно сделать, это положить давно работает код на другом потоке. Затем запустите этот поток из метода viewDidAppear. Взгляните на my response на другой вопрос. Код, который я ставлю, делает именно то, что, по моему мнению, вам нужно изучить. (и отображает индикатор занятости, но вы можете использовать эту часть, просто посмотрите на потоки и как он запущен, и как поток сообщает об этом пользовательскому интерфейсу.

+0

. Я все еще собираюсь справиться с obj-c, поэтому спасибо за ваше терпение. Теперь я понимаю, что sleep (1) не является вариантом, так как он останавливает появление viewDidAppear. Пока я могу использовать NSTimer для счастливого вызова метода несколько раз или только один раз, теперь проблема заключается в том, что этот метод не может получить доступ к экземплярам класса, которые я установил в viewDidAppear. К сожалению, для вызова метода NSTimer необходимо использовать экземпляры классов, которые уже настроены так, чтобы он знал, когда нужно аннулировать NSTimer и остановить цикл. Я понимаю, что этот пробел в знаниях является фундаментальным, я просто печально известен тем, что кусаю больше, чем могу пережевывать ;-) – Timbo

1

В viewDidAppear, вероятно, ваш лучший выбор.

Кстати, спать (1) не помогает ... это заставит ваше приложение действовать так, как будто оно зависает в расчете. Если вы не пытаетесь его задержать, удалите эту строку кода.

Если вы хотите что-то вроде таймера обратного отсчета или Countup ... увидеть это how to show countdown on uilabel in iphone?

+0

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

+1

Timbo, вместо использования sleep (1), хотя вы, вероятно, захотите изучить использование NSTimer, как в примере link Я отправил этот метод в любой промежуток времени, который вы указали, скажите каждую секунду, не задерживая все остальное в своем приложении. – iwasrobbed

+0

+1 к Робу. NSTimer - это именно то, что вы хотите запускать определенное событие каждую секунду (при условии, что он не должны быть миллисекунды точными, что, я думаю, это не так, поскольку вы в настоящее время используете сон). Вы также можете использовать отдельный поток, как говорит Дерек, но это вызывает проблемы f нить синхронизации. – JeremyP

Смежные вопросы