UITableView에서 셀 삭제를 구현할 때 기본적으로 아래와 같은 코드를 사용합니다.
- (void)tableViewUITableView *)tableView commitEditingStyleUITableViewCellEditingStyle)ed itingStyle forRowAtIndexPathNSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade]; } }
이렇게만 해놓으면 아래와 같은 에러가 발생됩니다.
'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (0) must be equal to the number of sections contained in the table view before the update (1), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'
그 이유는 UITableView에서 delete를 하고 난 다음에는 reloadData로 인해 numberOfRowsInSection을 호출하기 때문입니다.
numberOfRowsInSection에서는 아시다시피 section 당 row 수를 뿌려주는데, 이 수가 맞지 않기 때문이죠..
따라서 아래와 같이 코딩해 주어야 합니다.
- (void)tableViewUITableView *)tableView commitEditingStyleUITableViewCellEditingStyle)ed itingStyle forRowAtIndexPathNSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [데이터 소스 removeObjectAtIndex:indexPath.row]; // 먼저 셀에서 빼줌. [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade]; } }즉, 먼저 데이터 소스에서 제거하고 테이블에서 제거시키자! 간단하죠~?
'Work > iOS' 카테고리의 다른 글
iOS9에서 JQuery.popup 이 열리자마자 닫히는 경우 해결법 (0) | 2015.10.13 |
---|---|
XCode4에서 Scheme 이름 변경하기 (Rename scheme name in XCode4) (0) | 2011.08.07 |
TapkuLibrary Library (아이폰에 달력 표시 라이브러리) 사용법 (3) | 2010.08.13 |
iPhone App 이름 지역화 하기 (App name Localization) (0) | 2010.07.27 |
아이폰 개발자 등록없이 디바이스 디버깅 하기 (Developing without Provisioning Profile) (0) | 2010.07.14 |