Обновите UIProgressView с уведомлением

Я пытаюсь обновить UIProgressview при загрузке данных с сервера. У меня есть класс с общим экземпляром для обработки связи с сервером, и есть метод, который получает данные с сервера (в цикле while). Теперь я хотел бы обновить свой UIProgressView, отправив уведомления из моего класса связи с сервером (sharedInstance), и это просто не работает.

UIProgressView правильно установлен в InterfaceBuilder, и show/hide/setProgress работает нормально, но setProgress не работает через уведомление.

Вот тестовый цикл в моем классе серверной связи:

- (void)completeServerQueue {

NSNumber *progress = [[NSNumber alloc] init];
for (int i=0; i<15; i++) {

    progress = [[NSNumber alloc] initWithFloat:(100/15*i) ];

    float test = [progress floatValue];

    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"ServerQueueProgress"
     object:progress];

    sleep(1);
}

}

И это метод, вызываемый при обнаружении уведомления (я проверил его с точками останова, он выполняется...):

- (void)serverQueueProgress:(NSNotification *)notification {
[serverQueueProgressView setProgress:[[notification object] floatValue]];

}

Любые идеи?


person Tamas Gal    schedule 31.03.2011    source источник


Ответы (2)


Общается ли код с сервером в фоновом потоке?

Если это так, вы можете попробовать сделать:

[self performSelectorOnMainThread: @selector(updateProgress:) withObject: [notification object]];

Затем вам понадобится этот метод:

- (void) updateProgress: (CGFloat) value
{
      [serverQueueProgressView setProgress: value];
}
person JFoulkes    schedule 31.03.2011

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

- (void)serverQueueProgress:(NSNotification *)notification {
    if(![NSThread isMainThread])
    {
        [self performSelectorOnMainThread:_cmd withObject:notification waitUntilDone:NO];
        return;
    }
    [serverQueueProgressView setProgress:[[notification object] floatValue]];
}
person Joe    schedule 31.03.2011