2017-05-01 23 views
0

我有一个UserObject,它有一个“course”属性。我尝试更新“课程”,但它不工作。Realm - commitWriteTransaction:outError

这里是我的代码:

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返回[自我commitWriteTransaction:outError]

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

}

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

+0

你是什么意思时,你说你的代码是“不工作”? – bdash

+0

@bdash我的意思是我无法为“课程”节省新的价值 – acmel067

回答

0

将对象保存到Realm后,您无法在写入事务之外修改其属性。在这种情况下,您已经查询过某个对象,尝试在写入事务之外修改其属性,然后尝试重新插入realm.add(_, update:),这是多余的,因为只有在处理尚未处理的对象时才需要该对象由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)") 
    } 
}