2

Webサーバーからランダムなアンケートを取得したフォームがあります。ページを更新するには、ボタンを実行する必要があります(setNeedsDisplay)...ボタンをクリックすると、アプリがクラッシュしました。

*キャッチされなかった例外'NSInvalidArgumentException'によるアプリの終了、理由:'-[ExercisesViewController setNeedsDisplay]:認識されないセレクターがインスタンス0x6a1e840に送信されました0x301a1a 0x13c799e 0x135e640 0x132a4c6 0x1329d84 0x1329c9b 0x12dc7d8 0x12dc88a 0x3d626 0x1f96 0x1f05)例外のスローと呼ばれる終了*

//Add refreshing agenda
    scrollViewFrame = CGRectMake(0, 200, 80, 40);
    mark = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    mark.frame = scrollViewFrame;
    [mark setTitle:@"Get Score" forState:UIControlStateNormal];
    [mark setBackgroundColor:[UIColor clearColor]];

    [mark addTarget:self 
             action:@selector(markButtonSelected:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:mark];

..。

- (IBAction)markButtonSelected:(id)sender{
[self performSelectorInBackground:@selector(setNeedsDisplay) withObject:nil];

}

これは構文の問題ですか?私はここでそれがスレッドと関係があることを読みました。誰かがスレッドについて説明できますか、それとももっと直接的なアプローチがありますか?よろしくお願いします...

4

4 に答える 4

4

setNeedsDisplayメソッドはUIViewのメソッドであり、ではありませんUIViewControllermarkButtonSelected:メソッドに次を追加するだけです。[self.view setNeedsDisplay];

于 2012-04-26T13:02:48.307 に答える
0

UIViewControllerではなく、UIViewでsetNeedsDisplayを呼び出す必要があります。これを非同期で行うと、パフォーマンスが向上します。GCDを使用して非同期作業を行うことは、Appleが推奨する方法です。

すなわち:

    dispatch_async(dispatch_get_main_queue(), ^{
      [self.view setNeedsDisplay];
    });
于 2012-04-26T13:40:29.040 に答える
0

使用する:

[self.view setNeedsDisplay];
于 2012-04-26T13:01:39.553 に答える
0

ビューの更新はメイン スレッドで行う必要があります。

使用する

[self.view performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
于 2012-04-26T13:17:09.917 に答える