使用GCD实现Realm.io的正确方法?

时间:2015-01-26 16:03:55

标签: ios8 grand-central-dispatch realm

我想知道这是否是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];

1 个答案:

答案 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];
});