问题标签 [performbatchupdates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
209 浏览

ios - UICollectionView 插入部分后删除标题

我的 中有几个部分UICollectionViewController,只有第一个应该有标题。如何在从前一个第一部分删除标题的同时很好地在前面插入一个部分?

我已经设置referenceSizeForHeaderInSection为非.zero第一部分。这是我到目前为止所拥有的。它可以工作,但在插入动画完成后,标题明显被删除。我试图把它们放在一起,但它只是没有用

0 投票
1 回答
166 浏览

swift - Swift indexPath 数组计算

我正在尝试解决如何使用 .map 为 peformBatchUpdates 函数修改 collectionView 中的插入 indexPaths

假设我在 collectionView 中有项目 1 2 3 4 5 6 7 和要删除的 indexPaths 数组

和一个用于插入的 indexPaths 数组

我相信 performBatchUpdates 操作的插入 indexPaths 需要在执行删除后计算,因此看到删除是 collectionView 项目中的前 2 个项目,insertingIndexPaths 的 indexPath.item 需要减少 2 才能插入正确的位置,即我希望最终的 insertIndexPaths 是......

本质上,我认为我需要检查 insertIndexPath 数组中的每个 indexPath.item,查看该 insertIndexPath 前面有多少个deletionIndexPaths,然后将insertingIndexPath.item 递减该数字。

我如何在这些插入索引路径上使用 .map 来获得正确的结果?

0 投票
1 回答
7409 浏览

ios - iOS 11 UITableView performBatchUpdates 完成闭包未被调用

我有一个UITableView显示来自多个 RSS 提要的帖子的聚合提要。UITableView每当我的应用程序从提要中提取新帖子时,我都会创建一个对象,该对象表示更新当前行所需的所有插入和删除。我将这些对象放入一个数组中,用作 FIFO 队列。每隔几秒钟,我就会从这个数组中拉出第一个元素,并尝试在UITableViewusing 函数中执行所有的插入和删除UITableView:performBatchUpdates

这一切都很好......只要用户不上下滚动UITableView。如果滚动正在进行,更新将停止,因为我设置了一个标志,以确保我总是等到最后一组插入/删除完成后再开始下一批,遗憾的是,有时,完成关闭UITableView:performBatchUpdates永远不会被调用,因此我的标志永远不会被清除。

这是我用来处理传入更改队列的代码UITableView

我的问题是,为什么UITableView.performBatchUpdates不能调用它的完成块?我在这里做错了什么?

这是 iOS 11.2,使用 Xcode 版本 9.2。

谢谢!

0 投票
0 回答
205 浏览

ios - 有大量单元格时删除和插入行崩溃

我在表格视图单元格插入和删除方面遇到问题。根据用户选择的模式,我基本上有 1 个 tableView 可以在其中显示 3 个不同的数组。

当用户单击不同的模式时,我想为初始单元格删除设置动画,然后为其他单元格的插入设置动画。

当我的数组非常小(大小为 5 左右)但当它变得大于我崩溃时,这是有效的。我们是否限制删除未在 tableViews 中显示的 indexPaths?

无论如何,我的代码如下:

如前所述,当数组没有填充那么多项目时,不会发生任何问题。但是当数组填充似乎超过 5 个项目时,我遇到了问题。任何帮助将不胜感激。

谢谢你的时间,艾伦

0 投票
1 回答
241 浏览

swift - 如何同时更新 UICollectionViewCell 的边框并执行 UICollectionView Cells 的批量更新

我的目标是在 UICollectionView 单元格的边框周围添加阴影,同时执行 UICollectionView 的批量更新,这将导致所选单元格的高度扩大。这个想法是边框周围的阴影会淡入视野,或者像在这个 GIF 中那样立即进入视野,但是随着单元格的增长,这样做会遵循单元格的实际大小。如代码所示,我特别希望阴影在单元格周围而不是在单元格本身内 - 这是为了保持适当的边界。

我的 CollectionView 单元格

}

在此处输入图像描述

0 投票
0 回答
452 浏览

ios - UICollectionView 使用领域通知执行批量更新崩溃

我正在为我的消息传递应用程序使用领域 Swift。我用于消息传递的基本视图是自定义 UICollectionView,我使用领域 swift 进行数据存储。不幸的是,我在领域中找不到任何官方示例,用于使用领域通知更新集合视图。因此,当我通过为该领域列表添加观察者从领域获取通知令牌时,我实现了这样的实现,因此当来自该通知的更新时,我执行批量更新并删除、插入和修改领域告诉我在此通知中执行的索引。我的应用程序在测试环境中运行良好,但在生产中我遇到了一些崩溃,这些崩溃报告了我的面料,告诉我应用程序崩溃,这是由批量更新引起的。他们的信息大多像

或更新后部分中的项目数无效等。我现在很困惑。有任何想法吗?

我执行此更新的代码

0 投票
1 回答
60 浏览

swift - Swift,UIKit:如何在 tableView.performBatchUpdates() 上的 UIKit 中诊断 EXC_BAD_INSTRUCTION

很多天以来,我一直在与 tableView.performBatchUpdates 的 UIKit 问题作斗争。

我有一个简单的数据模型,其中包含由 tableView 和 tableViewCells 驱动的 15 个项目,其中包含 15 个相应的单元格(带回收),其中一个是自定义复选框控件。当单击复选框打开时,这 15 个元素中的 7 个被删除并添加(在中间),然后再次单击它以关闭,重新添加相同的 7 个单元格(在中间)。前5个不动。最后 3 个放置在中间删除/添加的 7 个元素之后。

我诊断出对数据源和表格视图的所有更新。先适当更新数据源,然后在tableView上适当调用deleteRows、insertRows和moveRow。

这在不滚动 tableView(打开和关闭状态)的情况下工作正常,导致我的 7 行显示和隐藏幻灯片 IN/OUT 动画。我可以重复多次,直到我不将单元格滚动到视野之外,它才会崩溃。

现在,如果我将 tableView 一直向上拖动,直到大多数单元格在它们上调用 cellForRow (回收并重新填充),然后使用复选框,然后我在 tableView.performBatchUpdates() 上得到 EXC_BAD_INSTRUCTION 崩溃方法(与我的任何代码无关,堆栈跟踪仅在 performBatchUpdates() 结束)。我已经对此错误进行了大量研究,通常它是 NIL 的强制解包,根据:Diagnosing EXC_BAD_INSTRUCTION in Swift standard library

问题是:我的单元格非常复杂,有很多验证和配置,堆栈跟踪不会导致我的任何代码。我还验证了Working (No scroll out of view first) vs Non working state (scroll out of view),对performBatchUpdates()中deleteRows、addRows和moveRow的逻辑没有区别。因此,随后对 cellForRow() 的调用对单元格所做的事情使 UIKit 对其内容不满意。而且由于第一次一切正常,它必须与细胞的回收有关,也许还有陈旧的数据。

有没有办法可以将 UIKit 源附加到我的项目中,这样我就可以看到 EXC_BAD_INSTRUCTION 的内容?

是否有任何其他符号调试技巧可以用来更好地理解哪些对象与 EXC_BAD_INSTRUCTION 相关?如果我从头开始制作一个示例项目,它可能会正常工作,因此它特定于我的实际单元结构和事件逻辑,这让 UIKit 感到不安。

目前,我被迫不使用 tableView 动画 (performBatchUpdates()),而只是执行 tableView.reloadData(),直到我弄清楚这一点。

使用 Exception 断点捕获异常时的图像:(堆栈跟踪仅上升到 performBatchUpdates() 本身,在 UIKit 中它内部或之上没有任何内容)。所以例外是在 UIKit 中。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

这是正在发生的所有删除/移动/添加操作的日志:

这适用于任何次数的迭代的第一次尝试。此日志保持不变,随后我第一次将表单完全滚动到视图之外,然后重试显示/隐藏字段。(所有相同的日志,但因 EXC_BAD_INSTRUCTION 而崩溃)。这就是为什么我认为它与索引算法无关。

下面是 performBatchUpdates 中的 Delete、Add 和 Move 逻辑,在更新数据模型以反映新状态后调用:

0 投票
0 回答
1406 浏览

ios - 为多次调用swift 5更新集合视图数据源的正确方法

我有一个集合视图,并且每次调用(Fetching)从其中的 firebase 加载 20 个单元格。所以我有两个部分,第一部分是我的源数组的计数,第二部分只是在bool值为fetch more真时显示加载单元。

这是集合视图代码:

这是为获取数据而调用的函数:

它运行良好。

现在我添加了一个带有几个选项的顶部菜单部分。

在此处输入图像描述

如果用户点击该部分,func pagination(forDivisionCollection: String)则将使用参数调用该函数,它将使用该参数过滤数据源并根据顶部菜单选项填充数据源,如下所示:

但是我'Invalid update: invalid number of items in section 0.在模拟器中运行 Xcode 时收到警告,并且它在物理设备上崩溃了。我进行了一些研究并提出了使用的解决方案,performBatchUpdates但它们都不起作用。所以我的问题是在这种情况下,获取数据并在集合视图中加载的完美方式是什么?提前非常感谢。

0 投票
0 回答
468 浏览

ios - 使用 performBatchUpdates 同时删除行、删除部分和重新加载行时 UITableView 崩溃

我正在尝试同时删除行、删除部分和重新加载行。我做了一个简单的应用程序来演示我的崩溃。它从 3 个部分开始。当buttonPressed被调用时,节 0 和 1 将从 中删除data,然后performBatchUpdates被调用以更新表视图。

我收到以下行/部分会计异常,但我不明白其中一些数字来自哪里:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。更新 (3) 后现有节中包含的行数必须等于该节中包含的行数更新前的节 (3),加上或减去从该节插入或删除的行数(2 插入,3 删除),加上或减去移入或移出该节的行数(0 移入,0 移动出去)。'

0 投票
1 回答
66 浏览

swift - CollectionView:无法为 ReloadItems 设置动画

ReloadItems 似乎不允许动画。

我尝试使用 collectionView:( willDisplay) 但 reloadItems() 实际上超过了动画(即切断它并重新加载单元格)

我尝试了 performBatchUpdates() 但在此块中出现 outOfRange 错误:

如果重新加载 collectionView 中的单个项目,如何将动画添加到该项目的重新显示?