问题标签 [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 投票
3 回答
12372 浏览

ios - 如何解决此 CollectionView 崩溃?

我的应用程序有两个CollectionViewControllers。在给定时间只有一个可见。

我在情节提要上创建了以下结构:两个容器视图相互叠加。每个容器视图都有一个CollectionViewController嵌入的。特定容器视图的可见性决定了哪个 collectionViewController 可见。

这就是问题。两个s 都在并行接收数据,但是 iOS 有一个错误,如果一个 CollectionViewController在不可见的情况下CollectionViewController尝试执行插入操作,则会导致应用程序崩溃。performBatchUpdates

为了防止这种情况,我在两个CollectionViewControllers 上都创建了一个 BOOL 标志,这样他们就可以知道它们是否可见并执行performBatchUpdates. 就像是:

这解决了部分问题。但是该应用程序在以下情况下继续崩溃:如果我点击按钮切换到不CollectionViewController可见,使其在接收更新时可见。

我的意思是:让我们调用A第一个CollectionViewControllerB第二个。A此时可见和B不可见。B开始接收数据并尝试执行performBatchUpdates但由于它是不可见的,因此if (self.isThisCollectionViewVisible == NO) return;阻止performBatchUpdates运行,这很好。现在我让A隐形和B可见。此时标志self.isThisCollectionViewVisible设置为YES并使performBatchUpdates应用程序崩溃并出现以下错误:

* 断言失败 -[CollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.7/UICollectionView.m:4625 *由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序',原因:'无效更新:第0节中的项目数无效。更新后现有节中包含的项目数(76)必须等于更新前该节中包含的项目数(70),加上或减去从该部分插入或删除的项目数(插入 5 个,删除 2 个),加上或减去移入或移出该部分的项目数(0 移入,0 移出)。

我认为CollectionViewController真的还没有准备好和更新能够做一个performBatchUpdates......这不是因为它正在更新而之前不更新数据源的问题。

我可以做哪些检查来防止这种情况发生?

注意:我特别注意到这次崩溃有一些奇怪的地方。它说正在插入 5 个元素并删除了 2 个元素,但实际上当崩溃发生时,正在插入 3 个元素,0 个元素被删除,2 个元素被更改。

0 投票
4 回答
15060 浏览

ios - performBatchUpdates 的噩梦崩溃

我正面临着一场噩梦般的performBatchUpdates崩溃collection view

问题基本上是这样的:我在服务器上的目录中有很多图像。想在collection view. 但缩略图必须从服务器异步下载。当它们到达时,它们将被插入到集合视图中,使用如下所示:

问题是这个(我认为)。假设在时间 = 0 时,集合视图有 10 个项目。然后我再向服务器添加 100 个文件。应用程序看到新文件并开始下载缩略图。随着缩略图的下载,它们将被插入到集合视图中。但是因为下载可能需要不同的时间,而这个下载操作是asynchronous,iOS 将在某一时刻失去对集合有多少元素的跟踪,整个事情都会因为这个灾难性的臭名昭著的消息而崩溃。

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

我有一些可疑的证据是,如果我打印数据集上的项目数,我会看到准确的 213。因此,数据集匹配正确的数字并且消息是无意义的。

我以前遇到过这个问题,但那是一个 iOS 7 项目。不知何故,现在在 iOS 8 上返回了问题,并且那里的解决方案不起作用,现在数据集IS IN SYNC

0 投票
2 回答
2915 浏览

xcode - Swift 3 如何正确编写完成处理程序块

我是 Xcode 和编程语言的新手,我需要你的帮助。我正在处理消息应用程序,但无法使用完成处理程序块。这是我的代码:

我使用CATransaaction 执行BatchUpdates,但是performBatchUpdates 方法中的Completion Handler Block 无法完成。如您所见,这不是正确的编写方式,我知道,但是我已经尝试了所有我知道的方法来实现它,但它不会。完成 :

请帮我。谢谢 !!

0 投票
1 回答
910 浏览

ios - UICollectionView BatchUpdate 边缘案例失败

我在 UICollectionView 的 batchUpdate 操作中发现了一个简单的边缘案例,它应该可以工作但失败了

尝试执行插入和移动到相同的索引路径({length = 2, path = 0 - 2})

我的操作是从 [A, B] --> [C, B', A] 走。这是通过更新完成的:

  • 从索引 0 移动到 2
  • 重新加载索引 1
  • 索引 0 处的插入

显然错误是错误的,插入索引与移动 TO 索引不同。

我设置了演示以确保这是一个 UICollectionView 问题,如果您希望看到它的实际效果,这是我的代码:

如果我使用代码有效的事实

代替

让我怀疑。这两个操作应该是等价的。

知道这里发生了什么吗?我相信这是一个 UICollectionView 错误吗?

编辑:事实证明与此有关的另一个崩溃:

尝试从同一索引路径({length = 2, path = 0 - 5})执行删除和移动

0 投票
0 回答
236 浏览

ios - 具有领域结果的已释放对象的校验和不正确

我对 Realm 上的 Results 对象有一些问题。我有一个“Offer”类型的集合,在三个不同的视图控制器中,我根据 Offer 属性对 Offer Realm 集合有三个不同的查询。每个用户的“优惠”对象都不同,因此,当用户注销时,我会清除所有会话数据,包括此集合。
当用户再次登录(关闭应用程序或不关闭应用程序)时,所有集合都重新加载,我收到此异常:

malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.

我重新加载每个集合的方式是:

  • 首先,如果本地数据库上有可用的报价,我会加载它们。

  • 之后,我从远程请求报价,当我收到它们时,我从本地删除所有并添加所有新的。

  • 最后,我将它们保存在 Realm 上,我从 Realm 接收变更集(使用 RxRealm)并在 CollectionView 上进行所有更改(使用performBatchUpdates)。

重新加载后我在 Realm 上进行“交换”的方式是:

ChangeSet 是这样应用的:

下面的异常出现在 applyChangeset 方法的最后一行。

我知道当我尝试重新加载集合时会出现问题,因为如果我不从远程请求报价,它会完美运行。

会发生什么?

问候

编辑:回溯

https://i.stack.imgur.com/zsKpg.png

http://pastebin.com/eY7VUmvE

0 投票
0 回答
802 浏览

ios - 当集合视图中只有 6 个项目时,请求全局索引 1793701674059 的索引路径

UICollectionView 在重新加载数据后执行批量更新时崩溃。我不执行任何删除或添加操作,仅在网络请求成功后刷新数据。像这样的代码

}

函数 reloadData 可能会连续两次快速调用,每次使用新的数据重新加载集合视图。我认为某处使用不正确的集合视图,但我找不到它。

0 投票
1 回答
935 浏览

swift - 领域 - 尝试从第 0 部分中删除项目 x,该部分在更新崩溃之前仅包含 4 个项目

所以我在我的collectionview上使用带有细粒度通知的Realm。当我选择一个单元格时,我不断收到以下错误:

尝试从更新前仅包含 4 个项目的第 0 节中删除项目 x

我遵循了 Realm 的示例代码,但找不到我做错了什么。我的代码如下:

因此,当用户按下单元格时,这将触发favoriseItemRealm,这将确保出现或不显示心脏图像(在某些单元格上正常工作,但在其他单元格上返回上述错误,而我没有删除细胞)。关于我做错了什么的任何想法?

更新:喜爱物品领域的代码

0 投票
2 回答
502 浏览

swift3 - 在点击手势上重置 CollectionviewCell 位置

我第一次在这里使用手势。请让我知道我的方法是否错误或任何更好的解决方案。

我正在尝试在向左滑动时删除 collectionView 单元,就像 UITableview 删除功能一样。删除工作正常。现在我想要的是,一旦我滑动单元格并点击 COllectionView 上的任何位置,它应该滑动回其原始位置(与 tableview 删除行功能相同)

我正在使用/尝试此代码 更新了 viewDidLoad点击事件

所以在这里我可以通过self.collectionView.performBatchUpdates将单元格的位置设置回原来的位置,但它的动画不流畅。我尝试使用

但它只有在轻扫单元格时才有效,而不是任何其他单元格或其他任何地方。任何的意见都将会有帮助!!

0 投票
2 回答
1356 浏览

java - 只有最后更新查询在 JAVA 的 addBatch 中工作

我正在使用以下代码

这是一个动态更新查询。

setField是我定义的一个函数,用于验证它是否存在于请求中。

我面临的问题

如果有 5 个更新查询,则只执行第 5 个查询。我不确定前四个查询发生了什么。

我也买不起

在 for 循环之外,因为我正在使用动态更新查询。

谁能澄清我做错了什么?

0 投票
0 回答
71 浏览

ios - UIView 动画因不明原因被系统取消

我有一个 UICollectionCell 的插入动画(如滑入),我在这个方法中调用了插入动画-collectionView:willDisplayCell:forItemAtIndexPath:[self.collectionView reloadData];当我调用它来重新加载数据时,一切正常。这样,动画将在当前显示。

但是当我尝试向这个插入的单元格添加另一个动画(如向下滑动)时,出现了问题。-reloadData我没有使用 ,而是使用[self.collectionView performBatchUpdates:completion:]自定义 UICollectionViewFlowLayoutinitialLayoutAttributesForAppearingItemAtIndexPath方法来实现向下滑动动画。

在单元格中,动画的委托方法的日志animationDidStop:finished:显示finished = NO

综上所述,当我使用-performBatchUpdates:completion代替时-reloadData, UICollectionView 的每个动画都消失了。那么问题是什么情况会导致动画消失呢?我的意思是看起来它已经从它所附加的层中删除了。但我没有那样做。任何想法?