【问题标题】:How does One to Many Relationship in Realm Swift?Realm Swift 中的一对多关系如何?
【发布时间】:2023-03-29 20:19:01
【问题描述】:

我是 Realm Swift 的新手。我想在 Swift3.0 中实现一对多的关系

我有文件夹列表,每个文件夹可能有子文件夹列表。所以我创建了两个 relam 文件,如下所示。

文件夹领域类

 class FolderRealm: Object {

    dynamic var folderName : String?
    dynamic var createdDate : Date?
    let subFolders = List<SubFolderRealm>()
 }

子文件夹领域类

 class SubFolderRealm: Object {

   dynamic var subFolderName : String?
   dynamic var createdDate : Date? 

 }

为了添加文件夹,我使用了以下代码行

let folder : FolderRealm  = FolderRealm()
folder.folderName = searchBarObj.text!
folder.createdDate = Date()
 try! realm.write {
   realm.add(folder)
 }

我有疑问,如何将子文件夹数据添加到文件夹和子文件夹领域?

【问题讨论】:

    标签: ios swift3 realm


    【解决方案1】:

    首先,考虑只使用一个Folder 类型而不是两个,当所有数据都相同时,没有意义的子文件夹对象。

    class Folder : Object {
        dynamic var folderName:String = ""
        dynamic var createdDate:Date = Date()
    }
    

    其次,对于您的情况,您可能希望使用LinkingObjects

    class Folder : Object {
        dynamic var folderName:String = ""
        dynamic var createdDate:Date = Date()
        dynamic var parentFolder:Folder? = nil
    
        let subfolders = LinkingObjects(fromType: Folder.self, property: "parentFolder")
    }
    

    你会创建这样的对象:

    let parentFolder = Folder()
    let subfolder1 = Folder()
    let subfolder2 = Folder()
    
    parentFolder.folderName = "whatever"
    
    subfolder1.parentFolder = parentFolder
    subfolder2.parentFolder = parentFolder
    
    let realm = try! Realm()
    try! realm.write { realm.add([parentFolder, subfolder1, subfolder2])}
    

    【讨论】:

      【解决方案2】:

      try! realm.write { realm.add(folder) } 行之前试试这个

      let folder : FolderRealm  = FolderRealm()
      folder.folderName = searchBarObj.text!
      folder.createdDate = Date()
      
      let subFolder1: SubFolderRealm = SubFolderRealm()
      subFolder1.subFolderName = "any string"
      subFolder1.createdDate = Date()
      
      let subFolder2: SubFolderRealm = SubFolderRealm()
      subFolder2.subFolderName = "any string"
      subFolder2.createdDate = Date()
      
      folder.subFolders = [subFolder1, subFolder2]
      
      try! realm.write {
          realm.add(folder)
      }
      

      【讨论】:

      • 这里的文件夹对象已经存在。所以我可以像下面那样更新试试! realm.write { folder.subFolders = [subFolder1, subFolder2] } 所以这里创建了子文件夹并将子文件夹添加到 Folder 类中?
      • Nayem,我在这里询问文件夹对象已经存在,子文件夹为空。现在我想用新的子文件夹列表更新我的文件夹对象。像下面这样写试试吧! realm.write { folderobjnew.subFolders.append(subfolder) }
      • 是的!这样就可以了
      • @srinadh 很高兴听到这个消息。所以你应该点击这个答案左侧的那个小勾号来接受这个答案,因为它解决了你的问题。 它将帮助将来遇到类似问题的成员
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多