我想知道这是否是GCD和realm.io所需的并发方法。我收到了一个从错误的线程错误"访问的领域,两者都写入同一个领域,但根据文档,这是允许的吗?
RLMRealm *realm = [RLMRealm defaultRealm];
NSString *username = @"username3";
NSString *realmPath = realm.path;
dispatch_queue_t remote_registration_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(remote_registration_queue, ^(void) {
[KUser remoteRegisterUsername:username realmPath:realmPath];
});
dispatch_queue_t local_registration_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(local_registration_queue, ^(void) {
[KUser localRegistrationWithUsername:self.username password:password realmPath:realmPath];
});
在每种方法中,我都在呼叫:
RLMRealm *realm = [RLMRealm realmWithPath:realmPath];
答案 0 :(得分:0)
你是否尝试过而没有通过Realm的路径?
我认为正确的方法是在每个方法中使用RLMRealm *realm = [RLMRealm defaultRealm];
来获取对正确Realm的引用。无需担心这条路。
因此,您应该能够减少首次引用的代码:
NSString *username = @"username3";
dispatch_queue_t remote_registration_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(remote_registration_queue, ^(void) {
[KUser remoteRegisterUsername:username];
});
dispatch_queue_t local_registration_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(local_registration_queue, ^(void) {
[KUser localRegistrationWithUsername:self.username password:password];
});