0

我有一个UITableView将选定的行存储在用户默认值中。这tableView是菜单结构的一部分,可以在应用程序的生命周期内重新加载,因此我想要加载之间的持久性。在viewDidLoad中,UserDefault检查是否存在,我调用

NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:(UITableViewScrollPositionMiddle)];

正如预期的那样,这工作正常。但是,它实际上并没有选择行,它只是突出显示它。如果我随后打电话

[self tableView:self.tableView didSelectRowAtIndexPath:path];

我遇到崩溃 - “无法识别的选择器发送到实例”。为什么?

4

2 回答 2

0

UITableView 通过两个委托协议UITableViewDelegateUITableViewDataSource工作。定义 UITableView 的类应该实现这些协议,并且应该将 UITableView 的委托和数据源设置为“self”。您不应该直接调用协议方法,这很可能是您崩溃的原因。

为了根据您的数据模型(用户默认)选择特定行,您需要在 tableView:cellForRowAtIndexPath: 中将UITableViewCell selected 属性设置为“YES”,以用于正在呈现的行。

我建议阅读本教程以帮助您更好地理解 UITableView。

http://www.iosdevnotes.com/2011/10/uitableview-tutorial/

于 2012-02-03T04:59:38.843 回答
0

[self tableView:self.tableView didDeselectRowAtIndexPath:path]将调用的取消选择方法的实现(在 UITableViewDelegate 中定义)。

由于您没有在委托中实现它,因此您会崩溃。

您应该致电: [self.tableView deselectRowAtIndexPath:path animated:NO];

于 2012-02-02T20:58:53.993 回答