저는 fmdb를 사용하여 일반 UITableView에 표시되는 일부 데이터를 관리하고 있습니다. 이 코드를 사용하여 하나의 셀을 삭제하려고합니다.UITableView에서 UITableViewCell 삭제
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
[db open];
[db beginTransaction];
NSString * stringtoInsert = [NSString stringWithFormat: @"DELETE FROM TTLogObject WHERE id='%@'", [idArray objectAtIndex:indexPath.row]];
BOOL success = [db executeUpdate:stringtoInsert];
if (!success)
{
NSLog(@"insert failed!!");
}
NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[db commit];
[db close];
[self getList];
}
}
다음은 현재 사용하고있는 viewDidLoad 및 getList 코드의 코드입니다.
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
shipperCityArray = [[NSMutableArray alloc] init];
pickupDateArray = [[NSMutableArray alloc] init];
paidArray = [[NSMutableArray alloc] init];
idArray = [[NSMutableArray alloc] init];
//NSString *path = [[NSBundle mainBundle] pathForResource:@"tt" ofType:@"db"];
[self getList];
}
- (void)getList
{
db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
[shipperCityArray removeAllObjects];
[pickupDateArray removeAllObjects];
[paidArray removeAllObjects];
[idArray removeAllObjects];
[db open];
FMResultSet *fResult= [db executeQuery:@"SELECT * FROM TTLogObject"];
while([fResult next])
{
[shipperCityArray addObject:[fResult stringForColumn:@"shipperCity"]];
[pickupDateArray addObject:[fResult stringForColumn:@"pickupDate"]];
[paidArray addObject:[NSNumber numberWithBool:[fResult boolForColumn:@"paid"]]];
[idArray addObject:[NSNumber numberWithInteger:[fResult intForColumn:@"id"]]];
NSLog(@"%@", [NSNumber numberWithInteger:[fResult intForColumn:@"id"]]);
}
[db close];
[self.tableView reloadData];
}
문제는 데이터가 데이터베이스에서 삭제된다는 것입니다. 그러나 삭제를 누르면 테이블보기에 셀이 더 이상 표시되지 않습니다. 앱을 다시 시작하면 올바른 데이터가 다시로드되고 삭제 된 셀은 실제로 사라집니다. 나는 그것이 numberOfRowsInSection
와 관련이 있다고 생각합니다.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%i", [shipperCityArray count]);
return [shipperCityArray count];
}
앱이 실행되면 적절한 양의 셀이 인쇄되지만 삭제가되면 아무 것도 인쇄되지 않고 호출되지 않는 것 같습니다.
나는 [self.tableView beginUpdates]
과 [self.tableView endUpdates]
을 사용하려고 시도했지만, 삭제 한 후에 잘못된 항목 수에 대해 설명하는 것은 오류로 보입니다. 이 문제를 해결하는 방법을 모르겠습니다. beginUpdates 및 endUpdates를 사용해야하는 경우 누군가가 이것이 올바르게 수행되어야하는 방법과 실제로 진행되는 작업을 설명 할 수 있습니까?
나는 이것을 사용하려고 시도하고 있는데, 나는 무엇을 deleteRowsAtIndexPaths에 전달 하는가? 지금 당장 코드 줄을 그대로두면 다음 오류가 발생합니다. - [NSIndexPath count] : 인식 할 수없는 selector가 인스턴스 0x7566e50에 전송되었습니다. 2013-08-19 22 : 57 : 28.808 Trucking Tracker [13861 : c07] ** * 'NSInvalidArgumentException', 이유 : 'NSIndexPath count : 인스턴스로 전송 된 인식 할 수없는 셀렉터 0x7566e50' – user1933131
인덱스 경로가 하나가 아니라 배열이므로 하나의 요소 배열을 가져야합니다. 방금 업데이트 했어. 미안해. –
아, 나는 그것을 시도했다. 그리고 캐치 예외를 'NSInternalInconsistencyException'이유로 응용 프로그램을 종료하는 이유 : '유효하지 않은 업데이트 : 0 번째 행의 행 수가 잘못되었습니다. 이후에 기존 섹션에 포함 된 행 수 update (2)는 update (2) 이전에 해당 섹션에 포함 된 행 수와 같거나 그 섹션 (삽입 된 0, 삭제 된 1)에서 삽입되거나 삭제 된 행 수를 더한 수 또는 빼기 수와 같거나 같아야합니다 (0은 이동, 0은 밖으로 이동). " – user1933131