ios7 indexPathForCell 的坑(真是一个大大的坑)

笔者在编写APP 有一个功能点击cell上一个button,修改cell的在tableview中的位置ios

在ios8上没有问题。app

在ios7上老是崩溃ui

如下是崩溃后提示:google

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 (11) must be equal to the number of rows contained in that section before the update (11), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).spa

开始怀疑是删除或插入indexpath 有问题 。google了下,解决方法各式各样。.net

后来断点调试发如今ios7上调试

[self.tableviewindexPathForCell:myCell] 返回了nilblog

在ios8中使用了get

- (void)selecttop:(id)sender{it

    if ([sender isKindOfClass:[UIButtonclass]]) {

        UIView *view = sender;

        AppListCell *myCell = (AppListCell *)view.superview.superview;

        NSIndexPath * cellPath = [self.tableviewindexPathForCell:myCell];

}

google下是ios7 上cell上面还多了一个UITableViewWrapperView 具体能够参见:http://blog.csdn.net/u013604612/article/details/23120615

stackoverflaw 中 http://stackoverflow.com/questions/19282304/uitableview-indexpathforcell-ios6-v-ios7

有一个很好的处理方法

 

- (void)selecttop:(id)sender{

    if ([sender isKindOfClass:[UIButtonclass]]) {

        UIView *view = sender;

        while (![view isKindOfClass:[UITableViewCellclass]]) {

            view = [view superview];

        }

        AppListCell *myCell = (AppListCell *)view;

        NSIndexPath * cellPath = [self.tableviewindexPathForCell:myCell];

}

标记下

真的是个坑!!!

听说ios6上也是两个superview 就能够获取到!!!!

相关文章
相关标签/搜索