细粒度通知旧/新RLMResults

时间:2016-07-26 17:11:14

标签: ios objective-c realm

我试图在写入事务之后找出插入/删除的对象。

使用细粒度通知块,我可以得到:

/// 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,那将是该集合的“先前版本”吗?

1 个答案:

答案 0 :(得分:1)

在此代码示例中,当通知块触发时,contacts将已处于更新状态。 deletionsinsertions值将与更新后的状态相关,以便仍然显示contacts中每个项目的先前状态的任何UI元素都可以更新以匹配。

不,我认为这样做并不安全。如果您将contacts的内容复制到NSArray,那肯定会在通知之前捕获contacts之前的排序。虽然Realm对象是实时的,但是如果任何contacts对象内的属性值发生了变化,那么它也会反映在数组中。

话虽如此,在将对象从RLMResults复制到NSArray时,您需要小心。在将每个对象传递给数组时直接触摸它将导致Realm延迟加载它,这可能会导致性能下降。