调用回调闭包时出现 RLMException
Posted
技术标签:
【中文标题】调用回调闭包时出现 RLMException【英文标题】:RLMException when calling callback closure 【发布时间】:2015-03-11 18:17:03 【问题描述】:我仍在努力思考如何使用 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)
当handler
回调被调用时,我得到了现在臭名昭著的RLMException, reason: 'Realm accessed from incorrect thread
。
我做错了什么?
【问题讨论】:
【参考方案1】:您需要确保将每个 dispatch
上的 RLMRealm
重新创建到 GCD 队列。如果您不使用realmdb
,而是使用RLMRealm.defaultRealm()
,那么一切正常吗?
【讨论】:
realmdb
是一个计算属性,每次都会创建并返回一个新的defaultRealm()
,不是吗?我尝试按照您的建议在我的方法中明确创建一个新的Realm
,但不幸的是问题仍然存在。
你能分享实际的堆栈跟踪吗?以上是关于调用回调闭包时出现 RLMException的主要内容,如果未能解决你的问题,请参考以下文章
调用 flash externalInterface 回调时出现 SCRIPT 16389 错误