Обновление UIProgressView из фона - PullRequest
2 голосов
/ 10 августа 2011

У меня есть приложение панели вкладок с тремя вкладками.Во втором представлении вкладок у меня есть UIProgressView.У меня есть NSTimer в моем методе viewDidLoad, который вызывает метод, который обновляет progressView

progressTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];

Пока все в порядке.

Я хочу знать, как запустить таймер в фоновом режиме на протяжении всего жизненного цикла приложения, чтобы progressView обновлялось независимо от того, в каком представлении находится пользователь. Было бы здорово, если бы вы могли показатья с фрагментом кода.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 10 августа 2011

Не рекомендуется обновлять элементы интерфейса из фоновых потоков. Также не рекомендуется изменять элементы пользовательского интерфейса представления, когда пользователь не находится в этом представлении. Вы используете ценные системные ресурсы.

Лучше всего обновить ProgressBar, как только это представление станет активным ...

ОБНОВЛЕНИЕ : Вы можете увидеть здесь , чтобы узнать, как запустить задачу в фоновом потоке. Вы можете настроить NSTimer для запуска в выбранном вами селекторе. Но опять же, такие вещи могут привести к некоторым странным ошибкам. Лучше избегать ..

0 голосов
/ 08 февраля 2013

вы можете добавить метод в фоновом режиме таким образом

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
// increment the progress here and keep the property of that count in appdelegate 
//
dispatch_async( dispatch_get_main_queue(), ^{
    // Add code here to update the UI/send notifications based on the
    // results of the background processing
});

});

в представлении с рассеянным видомWillAppear вы можете установить так: [loadingProgressView setProgress: appDelegate.count];

0 голосов
/ 10 августа 2011

Вы можете сохранить свойство в ProgressViewController (или даже в делегате приложения), например, float, которое отслеживает прогресс.Когда вам нужно обновить прогресс, другой ViewController может изменить значение свойства.

Как только представление станет видимым, обновите пользовательский интерфейс (UIProgressView) с viewWillAppear:.

...