UISearchDisplayController - почему мое представление результатов поиска содержит пустые ячейки? - PullRequest
6 голосов
/ 29 февраля 2012

Я собираюсь сойти с ума здесь, в моей базе данных Core Data у меня много пользователей, я подключил базу данных к контроллеру таблицы через NSFetchedResultController, и когда представление загружается, я вижу всех своих пользователей, и я могу выполнить детальный просмотр в детализированном контроллере с помощью раскадровки ... пока, боже, мое табличное представление содержит пользовательскую ячейку с представлением изображения и 2 uitextlabels, которым всем присвоены значения тегов ..

Теперь, когда я выполняю поиск, я создаю новый NSFetchedResultController с предикатом и выполняю executeFetch. Затем я получаю свойство fetchedObjects, которое содержит совпадающих пользователей, поэтому поисковый запрос также работает как чудо. во всех моих источниках данных tableviews я проверяю, является ли self.tableView == self.searchdispl.view, чтобы видеть, с какого контроллера я должен запрашивать данные. Во всех делегатах контроллеров я проверяю, какой контроллер активен, поэтому я знаю, какое представление перезагружать , Если в журнал заносится много данных, все в порядке за кулисами, все методы делегата и источника данных используют правильное представление и fetchcontroller.

В моем cellForRowAtIndexPath я могу выйти из моего user.name, и это всегда правильно, даже при поиске.

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

Кажется, что представление UISearchDisplayControllers - это общее представление, по крайней мере, когда речь идет о переходах и разметке ячеек ...

Я проверил все соединения от UISearchDisplayController с моим UITableViewController, и все выглядит нормально ...

Почему представление SearchDisplayControllers не принимает макет моей ячейки и не выполняет переход?

Спасибо:)

Обновление: только что выяснил, что идет не так, но пока не нашел решения. В моем cellForRowAtIndexPath ячейка всегда настроена в качестве ячейки по умолчанию, когда в этом методе используется searchdisplayview. Действительно ли мне нужно создать свою ячейку в коде для работы uisearchdisplay? Почему он не может использовать настроенную ячейку из раскадровки?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
{
 static NSString *CellIdentifier = @"PersonCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSLog(@"Default Cell");
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSFetchedResultsController *controller = tableView == self.tableView ? self.fetchedResultsController : self.fetchedResultsControllerForSearch;

Person *p;
p = [controller objectAtIndexPath:indexPath];       

[(UILabel*) [cell viewWithTag:1] setText:p.name]; 
[(UILabel*) [cell viewWithTag:2] setText:@"Status"];    

if(p.avatarImage){
    UIImage *avatar = [[UIImage alloc] initWithData:p.avatarImage];
    [(UIImageView *) [cell viewWithTag:3] setImage:avatar];      
}

return cell;

}

1 Ответ

12 голосов
/ 08 декабря 2013

Проблема заключалась в том, что когда я получил ячейку в cellforrowatindexpath, он не получил ее из исходного представления таблицы viewcontrollers, поэтому я изменил строку с

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

до

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

и теперь все хорошо, ячейка имеет макет из раскадровки, а сегы работают как шарм.

...