调用回调闭包时的RLMException

时间:2015-03-11 18:17:03

标签: ios iphone swift realm

我仍在尝试围绕如何使用GDC执行Realm查询。

我在我的一个班级中有这段代码:

class func placeNameForChatChannel(chatChannel: String, withCompletion handler: (String?)->())  {

    dispatch_async(realmQueue) {
        var channelEnvPredicate = NSPredicate(format: "channelName = %@", chatChannel)
        var channelEnvs = PSTChannelEnvironment.objectsInRealm(realmdb, withPredicate: channelEnvPredicate)

        if channelEnvs.count > 0 {

            var channelEnvironment = channelEnvs[0] as! PSTChannelEnvironment
            let placeName = channelEnvironment.placeName
            handler(placeName)

        } else {
            handler(nil)
        }

    }
}

这两个在我的Application Delegate

中被声明为全局变量
var realmdb: RLMRealm {
    return RLMRealm.defaultRealm() 
}

var realmQueue = dispatch_queue_create("com.myapp.realmdb", DISPATCH_QUEUE_SERIAL)

RLMException, reason: 'Realm accessed from incorrect thread回调被调用时,我正在获得现在臭名昭着的handler

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要确保在每个RLMRealm上重新创建dispatch到GCD队列。如果您使用realmdb而不是使用RLMRealm.defaultRealm(),那么事情是否有效?