RealmSwift:在add()期间保存相关对象

时间:2017-10-09 18:31:30

标签: swift realm

double highest = (double) numbers.get(0); if(highest < (double) numbers.get(i)){ highest = numbers.get(i); } 的标题中,它说:“添加时,如果它们尚未包含在Realm中,则此对象引用的所有子关系也将被添加到Realm中。”这是我希望的行为,但我并不是100%清楚“儿童关系”包含/排除的内容。此行为不包括哪些类型的Realm关系?

例如,如果我向领域添加add(_ object:, update:)对象并且我有另一个未保存的ClassA对象,那么ClassB对象是否会被保存:

  • 如果ClassB对象指向ClassB对象且ClassA具有ClassA LinkingObjects属性?
  • 如果将ClassB对象添加到ClassB的{​​{1}}属性中?
  • 如果List有一个指向ClassA对象的一对一关系变量?

我知道我可以设置一些示例类并使用它来弄清楚行为,但是如果可能的话我想要一些正式的澄清。

1 个答案:

答案 0 :(得分:2)

我在最近几个月也用领域找出了这种行为。根据我的经验,子关系也将保存在您的领域数据库中。您可以在下面找到基于您的要点的代码示例:

如果这是您的数据模型:

import Foundation
import RealmSwift

class ClassA: Object {

    dynamic var uniqueID:String?
    dynamic var someVaraible?


    dynamic var classB:ClassB?
    var list = List<ClassB>()
}
  

如果ClassB对象指向ClassA对象而ClassA具有   ClassB的LinkingObjects属性?

如果您有classA变量aVar,则可以使用aVar.classB = <your classB variable>添加对象,在这种情况下,目前还不会在域数据库中存储任何内容。如果您随后使用

将对象添加到领域
 try! realm.write({ 
    realm.add(aVar)
})

Realm将保存两个对象(aVar以及您的classB变量)。

  

如果将ClassB对象添加到ClassA的List属性中?

这与第一个问题中的行为完全相同 - &gt;如果您向领域添加classB'sclassB的列表(也将在您的classA数据库列中创建列表的每个条目)都将添加到领域。

  

如果ClassA具有指向ClassB的一对一关系变量   对象

在这种情况下,classB变量已经存在,您刚刚创建了一个classA变量,该变量开始指向领域中现有的classB存储条目。 (如果我误解了你,请纠正我。)