レルムを使用してCRUD操作を実行するモデルクラスがあります。不正なスレッドでレルムアクセスを防止する方法
すべての操作をシリアルキューで実行しようとしています。
私はキューのプロパティ宣言している:私は使用して上記のメソッドを呼び出すとき
+ (id)sharedInstance {
static ActivityManager *sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedManager = [[self alloc] init];
});
return sharedManager;
}
-(id)init{
self.realmQueue = dispatch_queue_create("realm_activity", DISPATCH_QUEUE_SERIAL);
dispatch_async(self.realmQueue, ^{
_secureRealm = [RLMRealm defaultRealm];
});
return self;
}
-(NSArray *)getDataOnSettingFilter{
NSMutableArray *activityArr = [NSMutableArray array];
NSString *filterSQL = //;
RLMResults *activityResults = [[[self getActivitySource]activities] objectsWhere:filterSQL];
dispatch_async(self.realmQueue, ^{
[_secureRealm beginWriteTransaction];
for (RealmActivity *activity in activityResults){
//modify realm properties
[_secureRealm addOrUpdateObject:activity];
[activityArr addObject:activity];
}
[_secureRealm commitWriteTransaction];
});
return [activityArr copy];
}
と::
@property (nonatomic, strong) dispatch_queue_t realmQueue;
@property (strong,nonatomic) RLMRealm *secureRealm;
を、私はキューを初期化するためにシングルトンを使用
[[ActivityManager sharedInstance]getDataOnSettingFilter]
レルムが間違ったスレッドからアクセスされているというクラッシュが発生します。
私はここで間違っていますか?正しいスレッドでレルムを呼び出しているかどうかを確認するにはどうすればよいですか?
ありがとう、私は、realmキューで作成されたrealmオブジェクトがcellForRowメソッドのメインスレッドでアクセスされ、その場合も私にクラッシュを引き起こしました。レルムを使用するセルのカスタマイズが領域キューで実行されていることを確認しました。 –