Ios 调用回调闭包时的RLMEException

Ios 调用回调闭包时的RLMEException,ios,iphone,swift,realm,Ios,Iphone,Swift,Realm,我仍在努力思考如何使用GDC执行领域查询 我的一个类中包含以下代码: class func placeNameForChatChannel(chatChannel: String, withCompletion handler: (String?)->()) { dispatch_async(realmQueue) { var channelEnvPredicate = NSPredicate(format: "channelName = %@", chatCh

我仍在努力思考如何使用GDC执行领域查询

我的一个类中包含以下代码:

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)
        }

    }
}
这两个变量在我的
应用程序委托中声明为全局变量

var realmdb: RLMRealm {
    return RLMRealm.defaultRealm() 
}

var realmQueue = dispatch_queue_create("com.myapp.realmdb", DISPATCH_QUEUE_SERIAL)
我得到了现在臭名昭著的
RLMException,原因是:'Realm在调用
handler
回调时从错误的线程访问


我做错了什么?

您需要确保在每次
分派到GCD队列时重新创建
RLMRealm
。如果您不使用该
realmdb
,而是使用
RLMRealm.defaultRealm()
,那么工作正常吗?

realmdb
是一个计算属性,每次都创建并返回一个新的
defaultRealm()
,不是吗?我尝试按照您的建议在我的方法中显式地创建一个新的
,但不幸的是问题仍然存在。您可以共享实际的堆栈跟踪吗?