1

サーバーからデータをロード中に UIProgressview を更新しようとしています。サーバー通信を処理するための sharedInstance を持つクラスがあり、(while ループで) サーバーからデータを取得するメソッドがあります。server-communication-Class (sharedInstance) から通知を送信して UIProgressView を更新したいのですが、うまくいきません。

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

}

何か案は?

4

2 に答える 2

0

コードはバックグラウンドスレッドでサーバーと通信していますか?

もしそうなら、あなたはやってみたくなるかもしれません:

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

次に、次のメソッドが必要になります。

- (void) updateProgress: (CGFloat) value
{
      [serverQueueProgressView setProgress: value];
}
于 2011-03-31T17:02:25.713 に答える
0

正しく機能しない別のスレッドから進行状況を更新しようとしている可能性があります。次のことを試してください。

- (void)serverQueueProgress:(NSNotification *)notification {
    if(![NSThread isMainThread])
    {
        [self performSelectorOnMainThread:_cmd withObject:notification waitUntilDone:NO];
        return;
    }
    [serverQueueProgressView setProgress:[[notification object] floatValue]];
}
于 2011-03-31T17:03:08.147 に答える