Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新RLMObject为Swift/IOS_Ios_Swift_Realm - Fatal编程技术网

更新RLMObject为Swift/IOS

更新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

我正在尝试更新域中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()

你的思路是正确的,你只需要确保你的更新是在写事务中完成的

对于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的所有地方更改我的应用程序,添加一个“开始”步骤,对吗?