我试图在写入事务之后找出插入/删除的对象。
使用细粒度通知块,我可以得到:
/// The indices of objects in the previous version of the collection which have
/// been removed from this one.
@property (nonatomic, readonly) NSArray<NSNumber *> *deletions;
/// The indices in the new version of the collection which were newly inserted.
@property (nonatomic, readonly) NSArray<NSNumber *> *insertions;
我的问题在于此片段:
RLMResults *contacts = [CYRLMAddressBookContact allObjects];
RLMNotificationToken *token = [contacts addNotificationBlock:^(RLMResults *_Nullable results,
RLMCollectionChange *_Nullable change,
NSError *_Nullable error) {}];
可以将contacts
视为该集合的“先前版本”吗?
如果不可以将contacts
转换为NSArray
,那将是该集合的“先前版本”吗?
答案 0 :(得分:1)
在此代码示例中,当通知块触发时,contacts
将已处于更新状态。 deletions
和insertions
值将与更新后的状态相关,以便仍然显示contacts
中每个项目的先前状态的任何UI元素都可以更新以匹配。
不,我认为这样做并不安全。如果您将contacts
的内容复制到NSArray
,那肯定会在通知之前捕获contacts
之前的排序。虽然Realm对象是实时的,但是如果任何contacts
对象内的属性值发生了变化,那么它也会反映在数组中。
话虽如此,在将对象从RLMResults
复制到NSArray
时,您需要小心。在将每个对象传递给数组时直接触摸它将导致Realm延迟加载它,这可能会导致性能下降。