【发布时间】:2012-02-12 14:18:49
【问题描述】:
我有一个允许通过各种字段(名称、城市、id)搜索 sql db 的应用程序我尝试将搜索实现为队列中的 NSOperations。并且 ui 在第一次搜索之间更新,但由于某种原因,当操作在后台继续时,tableview 不会响应触摸。不知道我错过了什么,或者我是否需要为操作队列自定义运行循环,如果需要的话,我会很感激一些帮助,因为我不太熟悉这是我现有的代码
- (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 一直保持到第一次搜索结束(没关系)并刷新表格视图。随着每个操作完成,它会刷新 tableview,但是在此期间 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);
}
【问题讨论】:
标签: uitableview nsoperation nsoperationqueue