UITableView通过NSFetchedResultsControllerDelegate,默认选择第一条记录?

时间:2010-04-17 15:50:51

标签: cocoa-touch core-data

我有一个UITableView,它通过一个实现NSFetchedResultsControllerDelegate的控制器从CoreData填充。如何让它自动选择第一行(并激活tableView:didSelectRowAtIndexPath消息)?

tableview用于各种谓词查询,因此我怀疑在UIViewController生命周期(viewDidLoad等)上工作的解决方案,但我是平台的新手,所以我打开了。

我尝试过各种各样的东西,但我不确定调用堆栈中的位置。我试过在tableView:cellForRowAtIndex:方法中调用cell.selected = true,但这最终会使单元格变黑(并且不会触发选定的回调方法)

一个tagent问题,包含所有委托和核心数据协议,是否意味着异步数据获取(多线程)?或者是NSFetchedResultsController在同一个线程中调用所有相关的方法?也许我只是害怕,如果它是异步的,那么竞争条件很难在以后排除故障。

2 个答案:

答案 0 :(得分:0)

当选择单元格时,无法添加注释以询问您要执行的操作,因此我将不得不猜测。

如果要将单元格标记为已选中,则应使用accessoryType属性,例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    ...
}

另一方面,如果你试图根据选择第一个单元格来执行某些逻辑,或者甚至显示一个新视图,那么这个逻辑应该是一个方法,你可以在数据加载后简单地调用它。 / p>

答案 1 :(得分:0)

这样做:

if (indexPath.section == 0 && indexPath.row == 0) {
   //select first row by default
   [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];
   //then populate detail view with corresponding managedObject
   [self tableView:tableView didSelectRowAtIndexPath: indexPath];
}

当然,假设您已经正确编码了didSelectRowAtIndexPath。