2012-02-12 48 views
0

我有一个应用程序,允许通过各种字段(名称,城市,ID)搜索一个SQL数据库我试图实现搜索作为队列中的NSOperations。并且UI在第一次搜索之间更新,但由于某些原因,tableview在操作在后台继续时不会响应触摸。不知道我已经错过了,或者如果我需要一个定制的runloop的操作队列如果是这样希望得到一些帮助,由于我不是与这里是我现有的代码没有得到控制回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]; 
} 

所以会发生什么是再熟悉不过了用户界面一直保留到第一次搜索结束(没关系),并刷新表格视图。由于每个操作在这段时间内完成它刷新的tableview,但是实现代码如下将不会对触摸做出反应......

本身看起来像这样的任务..

-(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); 
} 

回答

0

OK我回答我自己的问题,但在接下来的乡亲......

它作为确保实现代码如下刷新了在主线程中执行的那样简单......

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];