美文网首页
删除cell最后一行时候报错 的解决方案

删除cell最后一行时候报错 的解决方案

作者: 海边的遐想 | 来源:发表于2016-11-09 17:34 被阅读300次

    功能思路其实不难:

    交代一下,我自己要实现的效果:

    1.TableView是分组的。

    2.点击删除按钮后,某行被删除。

    写完,大概功能,运行:

    出现:

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

    libc++abi.dylib: handler threw exception

    原因:

    1.在调用deleteRowsAtIndexPaths:方法前,要确保数据为最新。也就是说,先将要删除的数据从数据源中删除。

    2.分组和分组中行数是变动的,不能写成死的!

    3.如果是分组,你会发现很怪的现象:当一个分组中,有多条数据时,你删除其中一条,正确;当一个分组中,你要删除唯一的一条时,仍然会报出如上的错误!

    删除某个分组中的最后一条数据时,分组数,和行数都要变。这时候,只调用了deleteRowsAtIndexPaths方法。也就是说,只对行数进行了操作,但是没有对变动的分组进行操作!

    查看帮助API,找到这么一个方法:deleteSections:方法!

    加上去,在删除某个分组中最后一条记录时,将该分组也删除!

    1.计算分组数

    - (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{

    return[_arrKeyscount];// _arrKeys中存放分组

    }

    2.计算每个分组中的个数

    - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{

    NSString* _date = [_arrKeysobjectAtIndex:section];

    NSArray* _notifications = [_dictDataobjectForKey:_date];// _dictData存放数据

    return[_notificationscount];

    }

    3.添加删除功能的代理方法

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

    {

    if(editingStyle ==UITableViewCellEditingStyleDelete) {

    [selfrefreshData];//刷新_arrKeys和_dictData中的数据

    intnewCount=0;

    if(indexPath.section<[_arrKeyscount]) {

    NSString*_date = [_arrKeysobjectAtIndex:indexPath.section];

    NSArray* _notifications = [_dictDataobjectForKey:_date];// _dictData存放数据

    newCount= [_notificationscount];

    }

    [tableViewbeginUpdates];

    if(newCount<=0) {

    [tableViewdeleteSections:[NSIndexSetindexSetWithIndex:indexPath.section]withRowAnimation:UITableViewRowAnimationLeft];

    }

    [tableViewdeleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationLeft];

    [tableViewendUpdates];

    }

    elseif(editingStyle ==UITableViewCellEditingStyleInsert) {

    //修改时

    }

    }

    相关文章

      网友评论

          本文标题:删除cell最后一行时候报错 的解决方案

          本文链接:https://www.haomeiwen.com/subject/xbktpttx.html