У меня есть приложение, которое позволяет выполнять поиск в базе данных sql по различным полям (имя, город, идентификатор). Я пытался реализовать поиск в виде NSOperations в очереди. и пользовательский интерфейс обновляется между первым поиском, но по какой-то причине табличное представление не будет реагировать на прикосновения, пока операции продолжаются в фоновом режиме. Не уверен, что я пропустил, или если мне нужен пользовательский цикл запуска для очереди операций, если это так, я был бы признателен за помощь в этом, поскольку я недостаточно знаком с этим, вот мой существующий код
- (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];
}
так что происходит, когда пользовательский интерфейс удерживается до завершения первого поиска (это нормально), и он обновляет табличное представление. Когда каждая операция завершается, она обновляет табличное представление, однако в течение этого времени табличное представление не будет реагировать на прикосновения ...
Сама задача выглядит следующим образом ..
-(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);
}