1

アプリのテキストビューでログ出力を表示する必要があります。シーケンス内でperformSelectorを使用しようとしましたが、思ったように機能しませんでした。誰かがそれを行う方法を教えてもらえますか?

たとえば、ボタンをクリックすると、その下で多くの操作を実行し、操作全体が完了した後ではなく、その場でテキストビューにログを表示したいと考えています。

さらに、同じシーケンス内でperformSelectorを複数回呼び出すことはできませんか?

以下は、ボタンクリック内のシーケンスです。

- (IBAction)Write:(id)sender {

 //do some action here
 DisplayString = @"Seq1 pass"
 [self performSelector:@selector(updateviewText) withObject:nil afterDelay:0];
 //do some more action
 DisplayString = @"Seq2 pass"
 [self performSelector:@selector(updateviewText) withObject:nil afterDelay:0];
 ....
}

これは updateviewText 部分です:

-(void)updateviewText {
        dispatch_queue_t queueNew = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
        dispatch_async(queueNew,^ {

        dispatch_async(dispatch_get_main_queue(),^{
            [self.txtViewUseCaseLOG setText:[NSString stringWithFormat:@"%@\n%@", 
                                       self.txtViewUseCaseLOG.text,DisplayString ]];             
        });           
    });
}

ここでは、 DisplayStringはグローバル変数です。

このコードは、テキストをテキストビューに設定しません...しかし、以前に尋ねたように、それらのメッセージが必要です...

4

1 に答える 1

0

UI を非同期的に更新することはできません。タスクを非同期で実行していて、UI を更新したい場合は、dispatch_sync.

また、何かを非同期で実行しているときに、別の非同期タスクを開くのはなぜでしょうか?

次に、これら 2 つのメソッドのみを使用している場合は、グローバル変数が不要になるようにDisplayStringNSString パラメータを追加することをお勧めします。updateViewText

于 2013-10-03T10:40:42.090 に答える