0

我的目标是与领域 swift 发展这种关系: swift领域中两个数据集之间的关系

我有一个包含所有字符的数据集。然后我有一些列表,我想在其中添加某些字符。

这是我到目前为止在快速代码中得到的:

//
//  Lists.swift
//
//  Created by Guest on 28.01.19.
//  Copyright © 2019 Dom. All rights reserved.
//
// https://academy.realm.io/posts/realm-primary-keys-tutorial/

import Foundation
import RealmSwift

class Lists: Object {
    // making use of primary keys
    @objc dynamic var listID = UUID().uuidString
    @objc dynamic var listName : String = ""
    @objc dynamic var listDesc : String = ""
    @objc dynamic var listProgressPercentage : Int = 0
    // lists all characters associated with this list
    var charIDs = List<Characters>()

    override static func primaryKey() -> String? {
        return "listID"
    }
}

和:

//
//  Characters.swift
//
//  Created by Guest on 28.01.19.
//  Copyright © 2019 Dom. All rights reserved.
//

import Foundation
import RealmSwift

class Characters: Object {
    // get charID from dictionary.txt later
    @objc dynamic var charID        = 0
    @objc dynamic var character     : String = ""

}

我的问题: - 列表仍然是空的。它现在如何添加一个新列表并向“字符”中的对象添加例如 25 个不同的对象引用?

感谢你的帮助!

4

1 回答 1

0

我没有看到代码有任何问题。这是我为测试所做的。我创建了两个列表和两个字符,然后将第一个字符添加到第一个列表,将第二个字符添加到第二个列表。

    let l0 = Lists()
    l0.listName = "list 0"

    let l1 = Lists()
    l1.listName = "list 1"

    let c0 = Characters()
    c0.character = "char 0 list 0"
    c0.charID = 0

    let c1 = Characters()
    c1.character = "char 1 list 1"
    c1.charID = 1

    l0.charIDs.append(c0)
    l1.charIDs.append(c1)

然后将数据写入Realm

do {
    let realm = try Realm()

    try! realm.write {
        realm.add(l0)
        realm.add(l1) 
    }
} catch let error as NSError {
    print(error.localizedDescription)
}

然后使用 Realm Studio 检查领域,字符和列表都已正确写入,并且 Lists CharIDs 属性链接回角色。

可能导致问题的不是代码,而是对象的命名方式。例如,Lists 对象不是列表。它是一个包含列表类型的属性以及描述该特定列表的其他属性的单个对象。同样,Characters 对象不是一堆字符,它是具有描述该字符的属性的单个字符。

假设这些对象用于冒险类型的游戏,我们想要跟踪哪些角色访问了游戏中的某个区域。

第一个对象用于游戏中的特定区域,它描述该区域并包含访问过的角色的列表属性。

class AreaVisitedObject: Object {
   @obj dynamic var: area_name = ""
   @obj dynamic var: area_id = ""
   var charsWhoVisitedList = List<Character>()
   @objc dynamic var char_id = UUID().uuidString

   override static func primaryKey() -> String? {
      return "area_id"
   }
    ...

然后是描述每个字符的字符对象

class CharacterObject: Object {
   @objc dynamic var char_name = ""
   @objc dynamic var char_id = UUID().uuidString

   override static func primaryKey() -> String? {
      return "char_id"
   }
    ...

请注意,我向 Character 添加了一个主键对象,因为您似乎没有重复的字符,因此它将确保每个字符都是唯一的,并且可以由该 uuid 引用。

希望有帮助。

于 2019-01-29T17:02:26.873 回答