Objective c 删除单个对象会发出无效的更改通知

Objective c 删除单个对象会发出无效的更改通知,objective-c,realm,Objective C,Realm,在从域中删除对象时,我注意到通知中有一件奇怪的事情。 删除单个对象时,有时更改包含2次删除和1次插入。若在表中显示结果,则所有结果看起来都正常。但我在地图上显示结果,这个触发器不需要重新插入对象的动画 我找到了两种解决问题的方法: 手动筛选重新插入的对象 按primaryKey对对象排序 按primaryKey排序的查询速度慢得多吗?或者有更好的解决办法 下面是一些测试代码(领域2.3.0,Xcode 8.2.1): 如果将请求行替换为以下内容,则输出看起来很好: _nfA = [[[Mod

在从域中删除对象时,我注意到通知中有一件奇怪的事情。 删除单个对象时,有时更改包含2次删除和1次插入。若在表中显示结果,则所有结果看起来都正常。但我在地图上显示结果,这个触发器不需要重新插入对象的动画

我找到了两种解决问题的方法:

  • 手动筛选重新插入的对象
  • 按primaryKey对对象排序
按primaryKey排序的查询速度慢得多吗?或者有更好的解决办法

下面是一些测试代码(领域2.3.0,Xcode 8.2.1):

如果将请求行替换为以下内容,则输出看起来很好:

_nfA = [[[ModelA allObjects] sortedResultsUsingKeyPath:@"pk" ascending:NO] addNotificationBlock:...

UITableView
的插入/删除API非常挑剔,因为很容易触发不一致异常。领域更改通知API旨在确保与
UITableView
/
UICollectionView
的行为紧密集成,这很可能就是发生这种情况的原因。我假设它正在删除一个相邻的单元格,然后将其作为事务的一部分重新插入

这样的行为是无法推翻的。如果确实要删除并重新插入同一单元格,则可以通过编程方式确定该行(通过比较其索引),然后忽略对其应用动画


任何排序都会比不排序慢。但是,由于您是通过整数排序的,因此它应该比通过字符串排序更快。

此外,请随时在上提交问题,以提出对更改通知系统的任何更改。这只是演示问题的示例。在我使用领域主键的应用程序中,主键是UUID字符串。所以realm不使用索引来加速排序?不,realm的索引系统不能像排序一样进行任何部分匹配。它只能进行精确匹配。如果要通过字符串进行排序,则需要通过迭代和比较每个元素对其进行排序。也就是说,您希望处理多少数据?在大多数情况下,排序算法仍然非常快,除非您处理的是非常大的数据集。其中两个可以有10万件物品。在我的测试中,我看不到约70k项的明显减速。。。
2017-01-20 10:44:19.394 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.395 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.395 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.396 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.396 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.397 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.397 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.397 Test[7536:12871658] Insertions: 1 deleteions:2 modifications:0
2017-01-20 10:44:19.398 Test[7536:12871658] Insertions: 0 deleteions:1 modifications:0
2017-01-20 10:44:19.402 Test[7536:12871658] Insertions: 0 deleteions:1 modifications:0
_nfA = [[[ModelA allObjects] sortedResultsUsingKeyPath:@"pk" ascending:NO] addNotificationBlock:...