1

ユーザーが更新ボタンを押したときに更新ボタンをアクティビティインジケーターに置き換え、テーブルビューが更新された後、更新ボタンに戻したいです。しかし、更新ボタンを押しても、アクティビティ インジケーターには変わりませんでしたが、データの再読み込みが完了するまで、更新ボタンが強調表示されます。

コードは以下の通りです。私は何か見落としてますか?

-(void) reloadNewsStarted{        
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicatorRightBarItem startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem];
[activityIndicatorRightBarItem release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];

[self reloadNewsEnded];
}

-(void) reloadNewsEnded {

//reload data process

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)];
reloadNewsBtn.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItem = reloadNewsBtn;
[reloadNewsBtn release];  }
4

3 に答える 3

2

書く代わりに

[self reloadNewsEnded];

書いてください

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil];

この行はバックグラウンドで新しいスレッドを開始するため、アクティビティ インジケーターとデータのリロードは 2 つのスレッドで同時に行われます。

于 2010-10-07T09:48:55.153 に答える
0

reloadNewStartedこの行がメソッドの最後にあるのはなぜですか

[self reloadNewsEnded];

ボタンへの変更を元に戻すだけのように見えますか?アクションが完了するまで待ってから呼び出す必要があります

于 2010-10-06T03:04:45.390 に答える
0

ボタンの変更は、実行ループがコードから制御を取り戻すまで有効になりません。リロード操作が同期的で、イベント キューをブロックしているように思えます。処理にかなりの時間がかかる場合は、メインの実行ループでバックグラウンド スレッドまたは非同期処理を使用する必要があります (たとえば、ネットワーク タスクとコールバックを管理するために NSURLConnection を使用するなど)。

于 2010-10-06T03:25:35.060 に答える