3

画面にメインビューコントローラーが表示され、バックグラウンドで実行されているクラス(デリゲート)が位置を取得しています。結果が得られたら、View Controllerのdelegateメソッドを呼び出して、画面のラベルを更新します。いくつかの方法を試しましたが、画面が更新されませんでした。

方法は次のとおりです。

-(void) updateDisplay
{

    NSLog(@"%@",myPosition.currentArea);
    _area.text = [NSString stringWithFormat:@"area = %@",myPosition.currentShopArea];


    //[self.view performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
    [self.view setNeedsDisplay];
    //[self.view setNeedsLayout];
}

コンソールを確認すると、正しい領域が表示されていますが、画面にはまだnullが表示されています。3つすべての方法(上記でコメント)を試しましたが、いずれも画面を更新しませんでした。

4

1 に答える 1

2

あなたは2つのことを試すことができます:

  1. updateDisplayメインスレッドで呼び出す:

    [delegate performSelectorOnMainThread:@selector(updateDisplay) withObject:nil waitUntilDone:YES];
    

    最終的には にアクセスUIKitしているので、正しく行う方がよいでしょう。

  2. それでも解決しない場合は、次を試してください。

    [_area setNeedsDisplay];
    

    この場合も、メイン スレッドでメソッドを呼び出すことをお勧めします。

于 2013-03-12T10:36:26.160 に答える