2017-01-17 47 views
0

我有一個包含一個主鍵和一個索引屬性的類。對象更改時不通知

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%的機會收到有關更改的通知。

我該如何檢查發生了什麼問題?

回答

0

在問了一個問題後,我寫了一個最小的項目來演示這個問題。看來演示項目工作得很好。我將行與我的應用程序的代碼進行了比較,並發現此問題是由以前的事務引起的,即爲下一次調用禁用通知令牌。

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

此代碼禁用的_bookmarksNotificationToken一個呼叫。無論將來是否由此交易或任何其他交易觸發。這是意想不到的。因爲我認爲,忽略的通知列表是按照每筆交易存儲的,而它只是RLMNotificationToken內的ignore-next-N-calls計數器。