2017-01-17 21 views
0

私は1つの主キーと1つのインデックス付きプロパティを持つクラスを持っています。オブジェクトが変更されたときに通知がありません

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 

そして、いくつかのテーブルに私はすべての変更に関する通知を受信したいです。私は書いた:

すべてがうまくいっていると思う。しかし、それはしません。 folderUuidを変更すると、変更に関する通知が届く確率は50%に過ぎません。

どうしたら問題が起こっているのか確認できますか?

答えて

0

質問をした後、私はこの問題を示すための最小限のプロジェクトを書きました。そしてデモプロジェクトはちょうどうまくいったようです。私は回線ごとにアプリケーションのコードを比較し、この問題は前のトランザクションによって引き起こされたこと、次の呼び出しのための通知トークンを無効にしたことを発見しました。

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

このコードは、_bookmarksNotificationTokenという1つの呼び出しを無効にします。この取引や将来の他の取引によって、それが引き起こされるかどうかは関係ありません。それは予期せぬことでした。私は考えていたので、無視された通知のリストはトランザクションごとに格納されますが、カウンタはRLMNotificationTokenの中にちょうど入っています。

関連する問題