0

バックグラウンドで呼び出したいこのメソッドがあると想像してください。

- (void)loadView
{
    [super loadView];
    //Make a button which will fire the "buttonClicked" method
    //Make my own uitableview.
    //Fire method: "theBackGroundMethod" in the background.
}

曖昧で申し訳ありませんが、できる限り明確にしようと思います。以下は私がやりたいことです。ビューがありますが、このボタンと空の UITableView があります。次に、BackGroundMethod でバックグラウンドを実行したいのですが、実行中にボタンをクリックして、UITableView にデータを送信する buttonClicked メソッドを起動できるようにしたいと考えています。

次のことを試してみましたが、否定的な結果が得られました。

[self performSelectorInBackground:@selector(theBackGroundMethod) withObject:nil];

これによりBackGroundMethodが開始されますが、サーバーから要求したデータはロードされません。

[self performSelectorOnMainThread:@selector(theBackGroundMethod) withObject:nil waitUntilDone:NO];

これによりBackGroundMethodが開始されますが、何らかの理由でボタンをクリックすることはできません。ボタンをクリックすることはできますが、メソッドがクリックを起動している間に行うすべてのアクションはその背後のキューに入れられるため、backgroundmethodがボタンを押したx回が処理されます。

上記の performSelector-functions の使用をブロックする可能性のあるものと、それらを解決する方法を知っている人はいますか? または、全体的な(おそらくより良い)アイデアがあります..?

4

3 に答える 3

0

非同期URLリクエストなどを実行している場合は、リクエストが存在するスレッドでrunloopを実行する必要があります。これが、すでに実行ループがあるメインスレッドで機能する理由です。

于 2011-10-11T08:09:10.063 に答える
0

私は同じ問題を抱えています.UITableを使用していたので、バックグラウンドで実行されているメソッドで、最後にこの行を追加しました

[self.tableView reloadData];

テーブルビューを使用しているかどうかはわかりませんが、これにより問題が解決する可能性があります。バックグラウンドで実行していただきありがとうございます;)

于 2011-10-17T12:44:14.793 に答える
-1

代わりに試してください:

[NSThread detachNewThreadSelector:@selector(theBackGroundMethod:) toTarget:self withObject:nil];
于 2011-10-10T15:39:27.553 に答える