Ios 调用回调闭包时的RLMEException
我仍在努力思考如何使用GDC执行领域查询 我的一个类中包含以下代码: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
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()
,不是吗?我尝试按照您的建议在我的方法中显式地创建一个新的域
,但不幸的是问题仍然存在。您可以共享实际的堆栈跟踪吗?