对象更改时无通知

时间:2017-01-17 15:07:36

标签: realm

我有一个包含一个主键和一个索引属性的类。

ModelBookmark.h

@interface ModelBookmark : RLMObject
@property NSString *uuid;
@property NSString *folderUuid;
@end

ModelBookmark.m

@implementation ModelBookmark
+ (NSArray *)indexedProperties
{
    return @[@"folderUuid"];
}

+ (NSString *) primaryKey
{
    return @"uuid";
}

-(void) changeFolder:(NSString *)newFolderUUID
{
    if(![self.folderUuid isEqualToString:newFolderUUID])
    {
        RLMRealm *realm = [RLMRealm defaultRealm];
        [realm beginWriteTransaction];
        self.folderUuid = newFolderUUID;
        [realm commitWriteTransaction];
    }
}
@end

在某些表格中,我希望收到有关所有更改的通知。我写道:

RLMRealm *realm = [RLMRealm defaultRealm];
__weak MyCollectionsViewController *wself = self;
_bookmarksNotificationToken = [[ModelBookmark allObjectsInRealm:realm] addNotificationBlock:^(RLMResults *results, RLMCollectionChange *change, NSError *error) {
    [wself updateFolderChilds:results change:change];
}];

似乎一切都很好,应该有效。但事实并非如此。当我更改folderUuid时,我只有50%的机会收到有关更改的通知。

我怎样才能检查出错的是什么?

1 个答案:

答案 0 :(得分:0)

在提出问题后,我写了一个最小的项目来证明这个问题。似乎演示项目运行良好。我使用我的应用程序的代码对行进行了比较,发现此问题是由以前的事务引起的,该事务禁用了下一次调用的通知令牌。

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
// any changes there
[realm commitWriteTransactionWithoutNotifying:@[_bookmarksNotificationToken] error:nil];

此代码禁用_bookmarksNotificationToken的一次调用。无论将来该交易还是任何其他交易都将触发。那是出乎意料的。因为我认为,每个交易都存储了忽略通知列表,而它只是ignore-next-N-calls内的RLMNotificationToken计数器。