【问题标题】:Realm - commitWriteTransaction:outError领域 - commitWriteTransaction:outError
【发布时间】:2017-05-01 17:53:05
【问题描述】:

我有一个用户对象,它有一个“课程”属性。我尝试更新“课程”,但它不起作用。

这是我的代码:

if let user = realm.objects(UserObject).filter(predicate).first {
        user.course = value
        do {
            try! realm.write {
                realm.add(user, update: true)
            }
        } catch let error as NSError {
            print("Something went wrong: \(error.localizedDescription)")
        }

    }

当我调试我的代码时,transactionWithBlock 返回 [self commitWriteTransaction:outError]

- (BOOL)transactionWithBlock:(void(^)(void))block error:(NSError **)outError {
[self beginWriteTransaction];
block();
if (_realm->is_in_transaction()) {
    return [self commitWriteTransaction:outError];
}
return YES;

}

你能帮我理解为什么吗?我的代码有问题吗?

【问题讨论】:

  • 你说你的代码“不工作”是什么意思?
  • @bdash 我的意思是我无法为“课程”保存新值

标签: ios iphone swift realm


【解决方案1】:

一旦一个对象被保存到 Realm,你就不能在写事务之外修改它的属性。在这种情况下,您已经查询了一个对象,尝试在写入事务之外修改其属性,然后尝试使用 realm.add(_, update:) 重新插入它,这是多余的,因为只有在处理不存在的对象时才需要这样做t 已经由 Realm 管理。

在这种情况下更新user.course 的正确方法是:

if let user = realm.objects(UserObject).filter(predicate).first {
    do {
        try! user.realm.write {
            user.course = value
        }
    } catch let error as NSError {
        print("Something went wrong: \(error.localizedDescription)")
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2010-12-20
    • 2011-04-03
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多