领域通知不会触发不影响查询的更新

时间:2017-03-02 00:17:49

标签: ios objective-c realm

我在Realm Objective-C v2.4.3中遇到了一个问题,如果修改不影响整体查询结果,则不会针对修改触发收集通知块。

举一个简化的例子。

Feed对象和FeedItem对象。 Feed具有items RLMArray属性。

RLMArray<FeedItem *><FeedItem> *items

我为RLMResults设置了一个集合通知块,其中查询为:

[Feed objectsWhere:@"ANY items.status > 0"]

如果我从0修改状态属性,则会触发插入更改 - > 1.如果我有一个查询的上限并且它移出了那个,那么删除会一样。但是,对FeedItem状态属性的任何更改(继续与查询匹配(例如从1 - > 2修改)都不会触发通知更改块,因为整体查询结果不会受到此更改的影响。

我是否预计此更改会受到收集文档中提及的修改?

  
      
  • 只要对象的属性,就会通知您有关修改的信息   已经改变了,这是以前收藏的一部分而且仍然是   一部分。

  •   
  • 您修改属于该人的狗的年龄属性。

  •   
  • 这使得可以离散地控制动画和   对UI内容的视觉更新,而不是   每次发出通知时都会随意重新加载所有内容。

  •   

我错过了让这项功能正常工作的东西吗? CollectionView的数据源是RLMResults,我想重新加载一个单独的CollectionViewCell以反映FeedItem状态的更新。

1 个答案:

答案 0 :(得分:0)

In the meantime I have worked around this by adding a lastModified property to Feed and then when making a change on FeedItem I update last modified using the inverse relationship.

self.feed.lastModified = [NSDate date];

Not that great, but it fires a modification change in the collection notification which is what I was after.

Happy to accept another answer that has a better way to achieve this.

Also found two existing Realm github issues which I've commented on

https://github.com/realm/realm-cocoa/issues/4305#issuecomment-283688989

https://github.com/realm/realm-cocoa/issues/3885#issuecomment-283274197