Не вернуть контроль над UI - PullRequest
       15

Не вернуть контроль над UI

0 голосов
/ 12 февраля 2012

У меня есть приложение, которое позволяет выполнять поиск в базе данных 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);
}

1 Ответ

0 голосов
/ 14 февраля 2012

ОК, я ответил на свой вопрос, но для следующих людей ...

это было так же просто, как обеспечение обновления таблицы просмотра в главном потоке ...

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