UISearchDisplayController-为什么我的搜索结果视图包含空单元格?

6
我快被搞疯了,我的Core Data数据库中有很多用户,我已经通过NSFetchedResultController将数据库连接到了tableviewcontroller上,在视图加载时,我可以看到所有的用户,并且我可以通过storyboard segue执行推送到详细视图控制器...到目前为止都很好,我的tableview包含一个自定义单元格,其中包含一个图像视图和2个uitextlabels,它们都有分配的标记值。
现在,当我执行搜索时,我使用谓词创建一个新的NSFetchedResultController,并执行performFetch。然后我获取fetchedObjects属性,它包含匹配的用户,因此搜索请求也像魅力一样工作。在我所有的tableviews数据源中,我检查self.tableView == self.searchdispl.view以查看应该从哪个控制器查询数据。在所有控制器委托中,我检查以查看哪个控制器处于活动状态,以便我知道应该重新加载哪个视图。如果我nslog许多数据,幕后的一切都很好,委托和数据源方法都使用正确的视图和fetchcontroller。
在我的cellForRowAtIndexPath中,我可以记录我的user.name,它总是正确的,即使在搜索时也是如此。
问题是UISearchDisplayController视图只有空单元格,除非我将UITableViewControllers动态原型单元格设置为基本单元格,那么两个tableviews都包含该带有用户名称的标签!单元格中仍然无法使用segue,但是单元格中有数据。
看起来UISearchDisplayControllers视图是通用视图,至少在涉及segue和单元格布局时是如此...
我已经检查了所有从UISearchDisplayController到我的UITableViewController的连接,一切看起来都很好...
为什么SearchDisplayControllers视图不接受我的单元格布局和segue?
谢谢 :)
更新:刚刚发现了问题出在哪里,但还没有找到解决方案。在我的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;

}


7
好的,虽然我刚弄清楚问题出在哪里,有点尴尬,但我会将其保留下来,或许这篇帖子能够帮助其他人 :) 问题在于当我在cellforrowatindexpath获取单元格时,它并没有从原始的视图控制器的表视图中获取,所以我将以下这行代码从 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 更改为 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; ,现在一切都好了,单元格拥有了storyboard中的布局,而且转场效果也很顺畅 :) - Jacob Rungwald
这真的很有效,你应该将它作为你自己问题的答案发布! - huong
1个回答

12

问题在于当我在cellforrowatindexpath中获取单元格时,它并没有从原始的视图控制器的表格视图中获取,所以我将这一行代码进行了更改:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

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

现在一切都很好,单元格的布局来自storyboard,并且segues能够正常工作。


这解决了我的问题。我正在尝试在iOS 8上实现这个,但感觉像是一个可怕的黑客。伤心脸... - Aaron Vegh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接