0

UITableView に問題があり、それからセグエイングしています。テーブル ビューには場所のリストが含まれており、セルをクリックすると、その場所の写真のリストに移動します。これらの写真の情報を読み込むには少し時間がかかるため、場所のリストにしばらく残ります。私の問題は、アプリの読み込み中にユーザーをフリーズさせたくないということです。ユーザーが目的の場所を切り替えることにした場合は、できるようにしたいのです。これに対する簡単な解決策はありますか、それとも再設計が必要ですか? セルがクリックされたときに呼び出されるものは次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self.activityIndicator startAnimating];
    [[tableView cellForRowAtIndexPath:indexPath] setAccessoryView:self.activityIndicator];
    self.query = ^{return [FlickrFetcher photosInPlace:self.locationDataArray[indexPath.row] maxResults:50];};
    self.locationSelected = [[self.locationDataArray[indexPath.row] valueForKeyPath:@"_content"] componentsSeparatedByString:@","][0];
    [self performSelector:@selector(pushView:) withObject:tableView afterDelay:0.0]; // Allows spinner to start spinning before the segue is actually performed. 
}

- (void)pushView:(UITableView *)tableView {
    [self performSegueWithIdentifier:@"Display Image List" sender:self];
}

メインキューにディスパッチしようとしましperformSegueWithIdentifire:sender:たが、うまくいきませんでした (とにかくうまくいくとは思いませんでした)。クエリは、宛先ビュー コントローラーによって実行されるものです。それを機能させる方法についてのアイデアはありますか?

4

2 に答える 2

0

もちろん、メインスレッドでセグエを実行し(ディスパッチなし)、そのセルで activityIndi​​cator を開始した新しい(空の)テーブルビューをロードする必要があると思います。画像のフェッチは viewDidLoad メソッドでディスパッチされ、読み込みが終了した場合はビューに「通知」し、tableView をリロードします。

このチュートリアルのように (単純な NSInvocationOperation を使用してバックグラウンドでダウンロードを実行します): http://www.icodeblog.com/2010/03/04/iphone-coding-turbo-charging-your-apps-with-nsoperation /

幸運を!

于 2012-08-02T21:36:11.943 に答える
0

写真のリスト ビューのコントローラーを使用できると思います。viewDidLoadそのコントローラーで、Grand Central Dispatch を使用して、写真を非同期に読み込み、テーブルのデータをリロードできます。

于 2012-08-02T21:37:33.770 に答える