我快被搞疯了,我的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编写代码来创建我的单元格吗?为什么它不能使用故事板中配置的单元格呢?
现在,当我执行搜索时,我使用谓词创建一个新的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;
}