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:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:1046 2013-04-08 17:01:13.069 生年月日リマインダー 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;

}

アプリが毎回クラッシュするわけではありません

4

3 に答える 3

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 はデータベースに必要です。

于 2013-04-08T12:03:23.443 に答える
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];

于 2013-04-08T11:45:08.010 に答える