【问题标题】:RLMException when calling callback closure调用回调闭包时出现 RLMException
【发布时间】: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

我做错了什么?

【问题讨论】:

    标签: ios iphone swift realm


    【解决方案1】:

    您需要确保将每个 dispatch 上的 RLMRealm 重新创建到 GCD 队列。如果您不使用realmdb,而是使用RLMRealm.defaultRealm(),那么一切正常吗?

    【讨论】:

    • realmdb 是一个计算属性,每次都会创建并返回一个新的defaultRealm(),不是吗?我尝试按照您的建议在我的方法中明确创建一个新的Realm,但不幸的是问题仍然存在。
    • 你能分享实际的堆栈跟踪吗?
    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2010-11-26
    • 2019-12-07
    • 2021-03-10
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多