5 iphone objective-c uitableview ios
在我的应用程序,我重装我的TableView ([tablView reloadData];)从TableView中删除一行之后,那么canEditRowAtIndexPath方法送花儿给人致电(透水)总的行数.
例如:
如果我的TableView上有5行,那么我从tableView中删除1行.删除后,我重新加载我的TableView ([tablView reloadData])但是canEditRowAtIndexPath方法调用5次   而不是4次?
所以我总是得到以下错误:
因未捕获的异常'NSRangeException'而终止应用程序,原因: ' *** - [__ NSArrayM objectAtIndex:]:索引5超出边界[0 .. 4]'
我也尝试在延迟(使用NSTimer)后重新加载表,但它也不适用于我.
我在这里放了一些代码:
我申请canEditRowAtIndexPath特定的行,@"status" isEqualToString:@"directory"如,
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%d", self.listOfSounds.count);
    // Return NO if you do not want the specified item to be editable.
    if([[[self.listOfSounds objectAtIndex:indexPath.row] objectForKey:@"status"] isEqualToString:@"directory"])
        return YES;
    else
        return NO;
}  
删除行代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self.sql_ deleteSoundFileAudioTableWhereMainID:[[self.listOfSounds objectAtIndex:indexPath.row] objectForKey:@"main_id"]]; /// delete record from DB
        [self.listOfSounds removeObjectAtIndex:indexPath.row]; /// delete record from Array
        [self updateListofSoundsFile]; /// Custom method
    }
}
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO; // i also tried to  return YES;
}
这updateListofSoundsFile是我的自定义方法代码是:
-(void)updateListofSoundsFile
{
    if(self.listOfSounds.count > 0)
        [self.listOfSounds removeAllObjects];
    self.listOfSounds = [self.sql_ getAllDataFromAudioTable]; // get all record from DB
    NSLog(@"%d",self.listOfSounds.count);
    [self.tblView reloadData];  
}
请提出任何建议,我该如何解决这个问题?
谢谢 :)
你需要从tableview中删除raw也是为了从数组中删除项目并使用此行重新加载数据因为从数组中删除项目而不是tableview.
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self.sql_ deleteSoundFileAudioTableWhereMainID:[[self.listOfSounds objectAtIndex:indexPath.row] objectForKey:@"main_id"]]; /// delete record from DB
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [self.listOfSounds removeObjectAtIndex:indexPath.row]; /// delete record from Array
        [self updateListofSoundsFile]; /// Custom method
    }
}
| 归档时间: | 
 | 
| 查看次数: | 7632 次 | 
| 最近记录: |