Свойства в пользовательском UITableViewCell не инициализируются для таблицы UISearchDisplayController - PullRequest
1 голос
/ 16 февраля 2012

Я использую UISearchDisplayController, чтобы иметь возможность отображать таблицу с пользовательскими ячейками на основе некоторых данных, которые я получаю с сервера.

Сначала я установил UISearchDisplayController внутри моего UIViewController.

self.searchController = [[UISearchDisplayController alloc]
                             initWithSearchBar:self.mySearchBar contentsController:self];
        self.searchController.delegate = self;
        self.searchController.searchResultsDataSource = self;
        self.searchController.searchResultsDelegate = self;

Мой UIViewController также реализует UISearchBarDelegate, поэтому я могу определить, когда начинается поиск. Я настроил блок так, что когда мой вызов API возвращается, он вызывается и словарь результатов сохраняется в свойстве self.searchResults:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // here we make the api call
    [api getSomeInfo:searchBar.text complete:^(NSDictionary *json) {

        self.searchResults = json;
        [self.searchController.searchResultsTableView reloadData];
    }];
}

Теперь у меня проблема в том, что в моем методе UITableViewDataSource я возвращаю пользовательскую ячейку. Моя ячейка создается, но ее IBOutlets никогда не инициализируются, поэтому я не могу правильно настроить их содержимое (текст, изображения и т. Д.):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (tableView == self.searchController.searchResultsTableView) {

        cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultsCellIndentifier"];

        if (cell == nil) {
            cell = [[SearchResultsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

        cell.customLabel.text = [self.searchResults objectForKey:@"customText"];  // cell exists but cell.customLabel is nil!!
    }

}

Почему контент ноль? Есть ли где-то в моем классе Custom Cell, где я должен настраивать содержимое?

Спасибо!

1 Ответ

1 голос
/ 18 февраля 2012

Я думаю, что ваша проблема в том, что вы использовали переменную cellIdentifier при создании ячейки, но строковую константу при снятии очереди.

Просто всегда воссоздание ячейки будет работать, но неэффективно вообще и приводит к значительным утечкам памяти.

Сначала вы должны установить cellIdentifier в соответствии с тем, в каком табличном представлении вы находитесь, а какойвид ячейки, которая вам нужна, затем удалите из нее этот cellIdentifier, а затем создайте новую, если необходимо.

...