更新RLMObject为Swift/IOS
我正在尝试更新域中RLMObject的现有实例 我找不到做这件事的方法 请给我举个例子 我可以保存和删除对象,但不知道如何使用以下方法更新对象:更新RLMObject为Swift/IOS,ios,swift,realm,Ios,Swift,Realm,我正在尝试更新域中RLMObject的现有实例 我找不到做这件事的方法 请给我举个例子 我可以保存和删除对象,但不知道如何使用以下方法更新对象: //Find Existing let predicate = NSPredicate(format: "formname = %@",formname) var localTypes = FormTypeLocal.objectsWithPredicate(predicate) if (localTypes.count == 1 ){ var ex
//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()
你的思路是正确的,你只需要确保你的更新是在写事务中完成的 对于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
。欢迎使用so。请显示您到目前为止尝试过的内容和/或您到目前为止查找信息的位置,以便人们可以看到您尝试过的内容。@mc110:添加了我到目前为止所做的。.我找到了。。。在领域中,如果您更新RLMObject的道具,它将立即被持久化。。。为了使事务保持原子性,所有事务都不需要:realm.beginWriteTransaction()fm.formdescription=formdescription fm.updatedAt=updatedAt fm.objectId=objectId realm.commitWriteTransaction()非常感谢您。。。另一方面:如果我在没有写事务的情况下进行更新会发生什么?更新丢失了吗?我喜欢领域的简单性,但我有一个存储库设计,通过将实例传递到repo来持久化对象,repo反过来在数据存储中创建或更新对象。我有两种不同的实现(假、文件等),其中Realm用于db持久性。现在,这个beginWriteTransaction需求(尽管我完全理解为什么)让我陷入困境,因为我无法修改对象,然后将它们传递到repo。如果我没有弄错的话,进入领域需要在我修改OBJ的所有地方更改我的应用程序,添加一个“开始”步骤,对吗?