2017-10-09 36 views
0

在標題中保存相關對象爲add(_ object:, update:)它說,「在加入時,該對象引用的所有子關係也將如果他們不是在它已經加入到域」這是我所希望的行爲,但我不清楚「子女關係」包含/排除的是什麼。這種行爲沒有涵蓋哪些類型的領域關係?RealmSwift:ADD()

例如,如果我加入一個ClassA對象的境界,我有另外一個未保存的ClassB對象,將ClassB對象保存:

  • 如果ClassB對象指向ClassA對象和ClassALinkingObjects屬性爲ClassB
  • 如果ClassB對象添加到ClassA一個List財產?
  • 如果ClassA具有對一關係變量指向ClassB對象?

我知道我可以設置一些示例類,並用它來解決這個問題,但如果可能的話,我想要進行一些官方說明。

回答

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的有一個 LinkingObjects屬性ClassB的?

如果你有一個classA變量aVar你可以aVar.classB = <your classB variable>在這種情況下,沒有增加任何新的對象將存儲在數據庫領域現在。如果你再一個對象添加到的境界與

try! realm.write({ 
    realm.add(aVar) 
}) 

境界是要拯救兩個對象(aVar,也是你的classB變量)。

如果將ClassB對象添加到ClassA的List屬性中?

這是完全一樣的行爲就像在你的第一個問題 - >的classB's列表(也列表的每一個條目將在classB數據庫列創建)將被添加到的境界,如果添加classA達到境界。

如果ClassA具有指向ClassB 對象的一對一關係變量?

在這種情況下classB變量已經存在,你就創建了一個classA變量,它開始指向境界現有classB存儲條目。 (如果我誤解了你,請糾正我)。

+1

這是正確的。注意:'LinkingObjects'是在運行時動態計算的,所以當對象被添加到Realm時,不需要在Realm中存儲與它們相關的顯式關係。 – AustinZ

+0

@ alexWoe89對於最後一種情況,我想知道在'ClassA'的初始化過程中,我還初始化了一個新的'ClassB'並將其設置爲'classB'變量(在保存任一對象之前),兩個對象在I調用'realm.add(classA)'? – blwinters

+1

@blwinters - 如果您初始化一個新的ClassA,並且在初始化ClassA期間另外啓動一個新的ClassB對象,那麼您將創建兩個對象 - 這就是對的 – AlexWoe89