iOS에서 프로그램을 구현하는 중간에


tableView 를 삭제하기 위해서


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath



다음 함수를 사용하려고 하는데,


에러메시지가 계속적으로 발생한다


해결 방법이 없을까??



===================================================================================


// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change

// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 데이타 리스트에서 없애기

    

    

    // 화면에서 보이는 것에서 없애기

    

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

    

===================================================================================




프로그램은 위와 같고, 


다음과 같은 에러메시지가 발생한다


    

    *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-3347.44.2/UITableView.m:1623

    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (5), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).

    




리스트 뷰에서 삭제해주는 작업은 있지만,


해단 내역을 실제로 가지고 있는 데이타에서는 삭제해주지 않아서


발생하는 오류.




화면에서 삭제하는 것과 같은 타이밍에


데이타 리스트에서도 해당 데이타를 삭제하도록


프로그램을 변경한다


===================================================================================


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 데이타 리스트에서 없애기

    

    [dataArray removeObjectAtIndex:[indexPath row]];

    

    // 미리 정의 데이터 파일로 아카이브

    [NSKeyedArchiver archiveRootObject:dataArray toFile:dataFilePath];

    

    

    // 화면에서 보이는 것에서 없애기

    

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


===================================================================================



다음과 같이 프로그램을 변경하면


오류없이 프로그램은 작동한다

Posted by 스타켄지니어
,