2012-02-12 11 views
0

さまざまなフィールド(名前、都市、ID)でSQLデータベースを検索できるアプリがあります。検索をNSOperationsとして実装しようとしました。 uiは最初の検索の間に更新されますが、何らかの理由で操作がバックグラウンドで継続している間は、テーブルビューはタッチに反応しません。私が見逃しているかので、私はそれで十分に慣れていないんだとそれにいくつかの助けをいただければ幸い場合、私は運転キュー用のカスタム実行ループが必要な場合は、ここで私の既存のコードUIに制御が戻らない

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 


    NSString *searchText = searchBar.text; 
    [self.searchQueue cancelAllOperations]; //NSOperationQueue 
    [self.searchResults startSearching:searchText]; 
    [self searchID:searchText]; 

    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(searchName:) object:searchText]; 
    [self.searchQueue addOperation:operation1]; 
    [operation1 release]; 

       //NSLog(@"Add city search"); 

    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(searchCity:) object:searchText]; 
    [self.searchQueue addOperation:operation2]; 
    [operation2 release]; 
} 

だだから何をされて何が起こるかわかりませんUIは、最初の検索が終了するまで保持され(OKです)、テーブルビューが更新されます。各操作は、それがテーブルビューをリフレッシュ完了すると、しかし、この時間の間、テーブルビューは、タッチに反応しません...

タスク自体は、次のようになります。..

-(void) searchCity:(NSString *)City{ 
    searchObject *myCity = [[searchObject alloc] init]; 
    self.searchResults.cityResults = [myCity searchCity:City]; //returns NSArray of items 

    if ([self.searchResults.cityResults count] == 0) { 

     [self.searchResults.cityResults addObject:[NSArray arrayWithObjects:@"Not Found.",@"",@"",@"",@"", nil]]; 
    } 
    [self.searchResults refreshView]; 
     //NSLog(@"Added from City Search\n%@",self.searchResults.cityResults); 
} 
OK

答えて

0

私は自分の質問に答えたが、次の人々のために...

は、それは...

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
テーブルビューのリフレッシュは、メインスレッド上で実行されたことを確実にするのと同じくらい簡単でした
関連する問題