yon*_* ho 5 iphone uitableview ios
我正在制作一个自定义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;
}
Run Code Online (Sandbox Code Playgroud)
然后当用户选择另一行时,将该行保存到:[[[NSUserDefaults standardUserDefaults] objectForKey:kPreviousSelectedRow],以便下次他可以看到他先前选择的行。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:indexPath.row] forKey:kPreviousSelectedRow];
}
Run Code Online (Sandbox Code Playgroud)
崩溃日志:索引为[[[[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]'
Run Code Online (Sandbox Code Playgroud)
编辑:并且如果我缓慢滚动tableview,它不会崩溃,如果我快速滚动它,它就会崩溃。什么?
你会崩溃,因为此时你没有具有指定索引的单元格,因为你只是在你的内部准备它- (UITableViewCell*)tableView:cellForRowAtIndexPath:
为了获得您期望的行为,请将其移出selectRowAtIndexPath:并将- (UITableViewCell*)tableView:cellForRowAtIndexPath:其放置在您正在更新UITableView:-(void)viewDidLoad或您调用-(void)reloadTable的另一个方法中
| 归档时间: |
|
| 查看次数: |
2794 次 |
| 最近记录: |