我知道这将成为那些令人头疼的时刻之一。
我有一个UITableView,我需要从中删除单元格。问题是,如果我先点击该行然后滑动以显示删除按钮,则仅调用didSelectRowAtIndexPath。如果我在没有明确点击该行的情况下滑动该行,则会出现EXC_BAD_ACCESS错误。我把一个NSLog放到didSelectRowAtIndexPath中,当我点击单元格时可以看到indexPath数组,但是如果我只是轻扫而不点击就没有了。
我已经完成了我的搜索份额,我99%确定我的代理正确连接(通常是问题#1)并且没有输入didDeselectRowAtIndexPath(通常是问题#2)。我也有我的.h文件(问题#3)。
提前致谢。
编辑:
我应该说:如果我在没有明确点击行的情况下滑动行,那么当我点击“删除”按钮时,我会收到EXC_BAD_ACCESS错误。如果我点击单元格然后滑动,我可以点击删除,它会按预期删除。
编辑:
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[bandList sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
NSDictionary *dict = [bandList objectAtIndex:indexPath.row];
cell.textLabel.text = [dict objectForKey:@"name"];
return cell;
}
- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
NSLog(@"IndexPath: %@", [indexPath description]);
}
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSDictionary *selectedBand = [bandList objectAtIndex:indexPath.row];
NSString *selectedBandId = [selectedBand objectForKey:@"id"];
[self deleteMyBand:selectedBandId];
bandList = [self getSavedBands];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
答案 0 :(得分:0)
这些线条向我跳出来:
NSDictionary *selectedBand = [bandList objectAtIndex:indexPath.row]; NSString *selectedBandId = [selectedBand objectForKey:@"id"];
我不明白你从数组中获取值,将其粘贴到字典中,然后从该字典中获取字符串的理由。不应该从
返回的值 [bandList objectAtIndex:indexPath.row];
与selectedBandId?
另外,当我不知道“deleteMyBand”和“getSavedBands”做什么时,我无法进一步分析它。尝试注释掉这些调用,看看是否可以删除可见行本身。这可能会告诉你问题出在哪里。
答案 1 :(得分:0)
不完全确定原因,但我使用排序的NSMutableArray作为我的源数据的事实似乎是问题所在。当我从表中删除行并更新MutableArray时,我遇到了崩溃。但是,如果我将源数据创建为NSArray,则将数组的mutableCopy转换为临时MutableArray,删除行,使用数组,然后将MutableArray写回NSArray,一切都很好。
我不认为这种解释是有道理的,但这是我所看到的模式。如果有人能想到为什么这可能有效,请赐教。我的直觉告诉我这是那种,但我的直觉最近并不正确。