2013-04-08 67 views
0
- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(editingStyle == UITableViewCellEditingStyleDelete) { 

     //Get the object to delete from the array. 
     NSLog(@"%@",[[_arrayForTable valueForKey:@"IDS"] objectAtIndex:[indexPath row]]); 

     NSInteger myInteger = [[[_arrayForTable valueForKey:@"IDS"] objectAtIndex:[indexPath row]] integerValue]; 
     NSNumber *selRow = [NSNumber numberWithInt:myInteger]; 
     NSLog(@"%@",selRow); 
     [self removeCell:selRow]; // this is working perfectly it gets remove from database 

     //Delete the object from the table. 
     // app get crash here crash report is pested below 
     [self.table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } 
} 

- (void) removeCell:(NSNumber *)selRow{ 

     NSLog(@"_arrayForTable%@",_arrayForTable); 
NSInteger myInteger = [selRow integerValue]; 

    [_arrayForTable removeObjectAtIndex:myInteger]; 

    NSLog(@"_arrayForTable%@",_arrayForTable); 



    if(deleteStmt == nil) { 
     const char *sql = "delete from PersonNamesAndBirthDates where ID = ?"; 
     NSLog(@"%s",sql); 
     if(sqlite3_prepare_v2(database1, sql, -1, &deleteStmt, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database1)); 
    } 
    NSLog(@"%d",myInteger); 

    //When binding parameters, index starts from 1 and not zero. 
    sqlite3_bind_int(deleteStmt, 1, myInteger); 

    if (SQLITE_DONE != sqlite3_step(deleteStmt)) 
     NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database1)); 

    sqlite3_reset(deleteStmt); 
} 

*在声明失败 - [UITableView的_endCellAnimationsWithContext:],2013年4月8日/SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:1046 17:01 :13.069 birthdate reminder 2 [583:15803] *终止应用到期 未捕获的异常'NSInternalInconsistencyException',原因: '无效的更新:无效的行数在第0部分中.行中包含的现有节更新(12)必须是 等于该部分中包含的行数 更新(12),加或减从 插入或删除的行数(0插入,1删除)以及加或减行数 移入或移出该部分的行数(0移入,0移入出)。”碰撞从表视图除去细胞

请建议一些

我numberofrow方法如下

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    // Return the number of rows in the section. 


    return _arrayForTable.count; 

} 

应用程序不崩溃每次某个作品的某个时候崩溃

+1

粘贴numnerOfRows方法 – 2013-04-08 11:34:34

+0

确定马诺哈尔加入 – 2013-04-08 11:38:29

+0

我的猜测是,你对'removeCell假设:?',这是工作这个行可能会从你的数据库中删除,但是你有没有检查你的变量'_arrayForTable'?看起来,它仍然存在。 – fguchelaar 2013-04-08 11:52:31

回答

1

好了,因为我看到它,你得到一个特定行的ID有:

NSInteger myInteger = 
    [[[_arrayForTable valueForKey:@"IDS"] objectAtIndex:[indexPath row]] integerValue]; 
NSNumber *selRow = [NSNumber numberWithInt:myInteger]; 

然后,您使用的特定行的ID,因为索引中删除来自阵列。

NSInteger myInteger = [selRow integerValue]; 
[_arrayForTable removeObjectAtIndex:myInteger]; 

这就是事情出错的地方。如果数组与您的TableView具有相同的顺序,则需要从中删除indexPath.row。该ID对于您的数据库是必需的。

+0

是的,我得到它。我想发布答案,但我做nt有点非常感谢你:) – 2013-04-08 12:11:05

0

试试这个:

- (void)tableView:(UITableView *)tv commitEditingStyle :(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(editingStyle == UITableViewCellEditingStyleDelete) { 

     //Get the object to delete from the array. 
     NSLog(@"%@",[[_arrayForTable valueForKey:@"IDS"] objectAtIndex:[indexPath row]]); 

     NSInteger myInteger = [[[_arrayForTable valueForKey:@"IDS"] objectAtIndex:[indexPath row]] integerValue]; 
     NSNumber *selRow = [NSNumber numberWithInt:myInteger]; 
     NSLog(@"%@",selRow); 

     [self.table beginUpdates];   

     [self removeCell:selRow]; // this is working perfectly it gets remove from database 

     //Delete the object from the table. 
     // app get crash here crash report is pested below 
     [self.table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

     [self.table endUpdates]; 

    } 
} 

注意的[self.table beginUpdates];[self.table endUpdates];围绕改变tableview的代码行。

0

IT“S工作 你commitEditingStyle方法,并加入这一行

[TableViewForFirstView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];