zoukankan      html  css  js  c++  java
  • iOS: 与 insertRowsAtIndexPaths 在 UITableview 中插入多个行

    我有 10 行已经在连接中想做什么添加另一个 10 行,我使用的 insertRowsAtIndexPaths,但我要的错误。

    以下是我使用的代码

    -(void)insertDownloadedActions:(NSMutableArray *)dataToAdd
    {
            __weak CurrentViewController *weakSelf = self;

            int64_t delayInSeconds = 2.0;
            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
                [weakSelf.tableView beginUpdates];
                [weakSelf.dataSource addObjects:dataToAdd];
                NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[weakSelf.dataSource count]-dataToAdd.count-1 inSection:0];
                [weakSelf.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop];
                [weakSelf.tableView endUpdates];
            });
    }

    但我要为那下列错误

    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 (20) must be equal to the number of rows contained in that section before the update (10), 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).

    解决方法 1:

    代码是密切,但表视图需要确切的对应与什么添加到数据源中要更新的索引路径。

    -(void)insertDownloadedActions:(NSMutableArray *)dataToAdd
    {
        // don't need this
        //__weak CurrentViewController *weakSelf = self;

        int64_t delayInSeconds = 2.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {

            // build the index paths for insertion
            // since you're adding to the end of datasource, the new rows will start at count
            NSMutableArray *indexPaths = [NSMutableArray array];
            NSInteger currentCount = self.datasource.count;
            for (int i = 0; i < dataToAdd.count; i++) {
                [indexPaths addObject:[NSIndexPath indexPathForRow:currentCount+i inSection:0]];
            }

            // do the insertion
            [self.dataSource addObjects:dataToAdd];

            // tell the table view to update (at all of the inserted index paths)
            [self.tableView beginUpdates];
            [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];
            [self.tableView endUpdates];
        });
    }

    你想要避免周期哪里块所有者保留块和块 weakSelf (通过使用块所有者"自我") 保留所有者。有的 weakSelf 模式在这里没有必要因为视图控制器不保留在被派遣的块的副本。

  • 相关阅读:
    弹框只弹一次(cookie)
    多个列表求笛卡尔积的几种方法
    mysqlrouter 8.0.17启动失败
    Eclipse启动项目成功,IDEA报错java.lang.ClassNotFoundException: javax.servlet.Filter
    java的回调机制,讲得很清楚
    Java 命令行 -D
    spring boot项目中,webservice生成客户端,wsdl可配置
    一个老项目的高并发改造,遇到的redis连接不释放问题。
    ExecuterService实现线程池
    子线程获取不到请求中变量的问题
  • 原文地址:https://www.cnblogs.com/xiaoxiaoyublogs/p/5446271.html
Copyright © 2011-2022 走看看