【问题标题】:Update RLMObject is Swift/IOS更新 RLMObject 是 Swift/IOS
【发布时间】:2014-07-26 11:15:34
【问题描述】:

我正在尝试更新 Realm 中 RLMObject 的现有实例。

我找不到方法..

请举个例子。

我可以保存和删除对象,但不知道如何使用以下方法更新对象:

//Find Existing 
let predicate = NSPredicate(format: "formname = %@",formname)
var localTypes = FormTypeLocal.objectsWithPredicate(predicate)
if (localTypes.count == 1 ){
var existingForm : FormTypeLocal = localTypes[0] as FormTypeLocal     
existingForm.customProp = "newVal"
//Now I need to update?????

let realm = RLMRealm.defaultRealm()
//
// Add to the Realm inside a transaction
realm.beginWriteTransaction()
realm.addObject(newForm)
realm.commitWriteTransaction()
//Delete
realm.beginWriteTransaction()
realm.deleteObject(newForm)
realm.commitWriteTransaction()

【问题讨论】:

  • 欢迎来到 SO。请展示您迄今为止尝试过的内容和/或到目前为止您在哪里查找过的信息,以便人们可以看到您尝试过的内容。
  • @mc110:添加了我到目前为止所做的事情..
  • 我想通了...在 Realm 中,如果您更新 RLMObject 的 props,它会立即被持久化...所有都在事务中以使其保持原子性:realm.beginWriteTransaction() fm.formdescription = formdescription fm.updatedAt = updatedAt fm.objectId = objectId realm.commitWriteTransaction()

标签: ios swift realm


【解决方案1】:

您在正确的轨道上,您只需要确保您的更新是在写入事务中完成的。

使用 Realm,只要您在写入事务中修改/更新 Realm 对象,这些更改就会被持久化。例如:

let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
// Find objects
var localTypes = FormTypeLocal.objectsWhere("formname = \(formname)")
// Update one of those objects
var existingForm = localTypes[0] as FormTypeLocal
existingForm.customProp = "newVal"
// Wrap up transaction
realm.commitWriteTransaction()

我们正在开发我们的 Swift 接口以支持泛型,因此as FormTypeLocal 将来将不再需要。

【讨论】:

  • 非常感谢...附带说明:如果我在没有写入事务的情况下进行更新会发生什么?更新丢失了吗?
  • 我喜欢 Realm 的简单性,但我有一个存储库设计,我通过将实例传递到存储库来持久化对象,这反过来又在数据存储中创建或更新对象。我有几个不同的实现(假的、文件等),其中 Realm 用于数据库持久性。现在,这个 beginWriteTransaction 要求(尽管我完全理解为什么)让我陷入了困境,因为我无法修改对象然后将它们传递到 repo。如果我没记错的话,Going Realm 需要通过添加“开始”步骤在我修改我的 obj 的所有地方更改我的应用程序,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2018-12-04
  • 2018-10-24
相关资源
最近更新 更多