UITableView行持久性 - 为什么“didSelectRowAtIndexPath”崩溃

时间:2012-02-02 20:53:01

标签: xcode uitableview didselectrowatindexpath

我有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];

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

2 个答案:

答案 0 :(得分:0)

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

由于您没有在代理中实现崩溃,因此崩溃了。

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

答案 1 :(得分:0)

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

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

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

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