iOS-7-620x350.jpg

昨天用Xcode5&iOS7调试时发现程序会挂在一个地方:

UITableView *tableView = (UITableView *)self.superview;
[tableView deselectRowAtIndexPath:[tableView indexPathForCell:self] animated:YES];

其中self是一个扩展自UITableViewCell的子类,出错的提示是UITableViewWrapperView没有deselectRowAtIndexPath的方法,后来才反应过来,iOS7中UITableView有一个subview是UITableViewWrapperView,它是所有UITableViewCell的superview。

后来代码改成这样:

UITableView *tableView = (UITableView *)self.superview;
if (![tableView isKindOfClass:[UITableView class]]) tableView = (UITableView *)tableView.superview;
[tableView deselectRowAtIndexPath:[tableView indexPathForCell:self] animated:YES];