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 模式在这里没有必要因为视图控制器不保留在被派遣的块的副本。

  • 相关阅读:
    公交/地铁出行测试用例点
    python第一次作业
    jmeter之jsonpath断言
    jsonhandle与jsonpath extractor(json值提取插件)
    jmeter 插件之Dummy samper-----------------moke服务
    jmeter插件安装
    JMeter组件之Test Fragment
    jmeter连接MySQL构造大量并发测试数据
    某购物网站大量用户登录脚本
    jenkins+ant+jmeter接口测试自动化平台(带发送附件测试报告)
  • 原文地址:https://www.cnblogs.com/xiaoxiaoyublogs/p/5446271.html
Copyright © 2011-2022 走看看