我正在制作一个自定义 UITableView 菜单选择器组件。每次选择特定行时,我都会保存该行的索引路径,以便用户下次选择另一行时,人们可以知道他之前选择的行。所以我将它添加到 cellForRowAtIndexpath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.textLabel.text = self.left[indexPath.row][@"name"];
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:[[[NSUserDefaults standardUserDefaults] objectForKey:kPreviousSelectedRow] integerValue] inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.textLabel.highlightedTextColor = [UIColor grayColor];
return cell;
}
当用户选择另一行时,将此行保存到:[[[NSUserDefaults standardUserDefaults] objectForKey:kPreviousSelectedRow],以便下次他可以看到他之前选择的行。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:indexPath.row] forKey:kPreviousSelectedRow];
}
崩溃日志:索引为 [[[NSUserDefaults standardUserDefaults] objectForKey:kPreviousSelectedRow] integerValue],计数为 numberOfRows。如您所见,它不应该超出范围。我不知道 [0...6] 来自哪里。
2013-08-23 21:01:26.107 [17605:c07] index:10, count:14
2013-08-23 21:01:26.173[17605:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 7 beyond bounds [0 .. 6]'
编辑:如果我缓慢滚动表格视图,它不会崩溃,如果我快速滚动它,它会崩溃。什么?