2014-01-16 6 views
0

UIViewController에 속한 UITable에서 행을 삭제하려고합니다. 내비게이션 막대에서 Edit 버튼을 사용합니다. 테이블 행을 누르면 편집 모드가됩니다.iOS에서 ViewController의 행을 삭제합니다.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
[super setEditing:editing animated:animated]; 
[self.tableView setEditing:editing animated:YES]; 

} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSMutableArray *work_array = [NSMutableArray arrayWithArray:self.inputValues]; 
     [work_array removeObjectAtIndex:indexPath.row]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

내가 여기서 뭘 그리워 : 그러나 때 행에 삭제 버튼은 다음 사용할 때 오류 ...'Invalid update: invalid number of rows in section 0….을받을 누르면? Apple 설명서가 어떻게 든 오래된 것 같습니다. 감사합니다.

답변

2

문제는 간단합니다. 테이블에서 행을 삭제하기 전에 데이터 모델을 적절하게 업데이트하지 않습니다.

당신이 할 일은 새로운 어레이를 만들고 그로부터 한 행을 삭제하는 것뿐입니다. 그것은 무의미하다. numberOfRowsInSection:과 같은 다른 데이터 소스 메서드에서 사용하는 것과 동일한 배열을 업데이트해야합니다.

+0

안녕하세요 rmaddy, 힌트를 주셔서 감사합니다. 추가 배열을 가져 와서 데이터 모델에서 사용하는 배열로 변경했습니다. 나는 너무 엉성했다. 감사! – JFS

1

문제는 사용자가 직접 테이블의 데이터 소스를 업데이트하지 않는다는 것입니다. 먼저 데이터 소스 (self.inputValues라고 가정 함)를 기반으로 work_array라는 완전히 새로운 배열을 만든 다음 항목을 제거한 다음 행을 삭제하려고 시도하지만 tableView의 데이터 소스에 항목이 여전히 포함되어 있습니다 너는 제거하려고했다.

당신이 self.inputValues가 변경 가능한 배열 있는지 확인하고 직접 같이, 해당 배열의 인덱스에있는 개체를 제거하기 만은 :

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.inputValues removeObjectAtIndex:indexPath.row]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

나는 희망이 도움이!

+0

답변을 주셔서 감사합니다 rmaddys 힌트와 함께 내 실수를 발견했다. 어쨌든 고마워! – JFS

+0

문제 없습니다, 정답으로 받아 들여야합니다! – Mike

관련 문제