Swift 3:'尝试修改写事务之外的对象 - 首先在RLMRealm实例上调用beginwritetransaction'

时间:2017-01-19 11:16:27

标签: ios swift realm

当我尝试更新Realm中的对象时,会发生错误。 我附上了我的代码。

class FHRealm
{
    static let sharedInstance = try! Realm()

    class func writeUserToRealm(userInfo:userInfo)
    {
        DispatchQueue.main.async {
            autoreleasepool
                {
                    sharedInstance.beginWrite()
                    sharedInstance.add(userInfo)
                    try! sharedInstance.commitWrite()
            }
        }
    }

    class func updateUserInRealm(userInfo:userInfo)
    {
        DispatchQueue.main.async {
            autoreleasepool
            {
                    sharedInstance.beginWrite()
                    sharedInstance.add(userInfo, update:true)
                    try! sharedInstance.commitWrite()
            }
        }
    }
}

我在ViewController中调用了Update函数。

FHRealm.updateUserInRealm(userInfo: userInfo.sharedInstance)

我无法预料到会出现什么问题。 请帮助我。

1 个答案:

答案 0 :(得分:6)

我没有看到问题的确切原因,但这可能是一个导致: sharedInstance可能是主线程。你正在将realm Object传递给它,可能来自另一个线程。

如果您阅读Realm docs

  

跨线程使用Realm的唯一规则是记住Realm,RealmObject或RealmResults实例不能跨线程传递。

所以我首先要说的是,不是调用你的包装器,而是直接从调用者对象中进行操作。