使用通知更新UIProgressView

时间:2011-03-31 16:56:09

标签: objective-c uiprogressview

我正在尝试在从服务器加载数据时更新UIProgressview。我有一个带有sharedInstance的类来处理服务器通信,并且有一个从服务器获取数据的方法(在while循环中)。现在我想通过从我的server-communication-Class(s​​haredInstance)发送通知来更新我的UIProgressView,它根本不起作用。

在InterfaceBuilder中正确设置了UIProgressView,并且show / hide / setProgress工作正常,但是setProgress无法通过通知。

这是我的server-communication-Class中的测试循环:

- (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]];

}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

代码是否在后台线程上与服务器通信?

如果是这样,您可能想尝试:

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

然后您将需要此方法:

- (void) updateProgress: (CGFloat) value
{
      [serverQueueProgressView setProgress: value];
}

答案 1 :(得分:0)

您可能正在尝试从无法正常运行的单独线程更新进度。请尝试以下方法。

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