Swift 关系中的领域没有添加行

Realm in Swift relationship no add rows

我正在构建具有一对多关系的应用程序。我无法在 class.

中添加行
class Bank : Object {

    @objc dynamic var id = 0
    @objc dynamic var allCash = 0
    let persons = List<Person>()

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

}

class Person : Object {

    @objc dynamic var id = 0
    @objc dynamic var cash = 0

    let parent = LinkingObjects(fromType: Bank.self, property: "person")

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

    }

    func incrementID() -> Int {
        let realm = try! Realm()
        return (realm.objects(TransactionType.self).max(ofProperty: "id") as Int? ?? 0) + 1
    }

}

在基础中保存日期

lat bank = Bank()
let persons = bank.persons
let parent = realm.objects(Bank.self).first!

try! realm.write {
    for person in persons {
        let newPerson = Person()
        newPerson.cash = person[cashTextField.text!] as! Int
        newPerson.id = person.incrementId()
        realm.add(newPerson)
        parent.persons.append(newPerson)   
    }    
}

当我按下按钮时,没有错误,也没有添加行。我也尝试了这种语法并看到行,但它没有任何关系。

try! realm.write {
        let newPerson = Person()
        newPerson.cash = Int(cashTextField.text!)
        realm.add(newPerson)
}

您问题中的代码确实相距不远,因此我们会稍微收紧它并让您继续。

首先,让我们定义客户和银行类

class CustomerClass: Object {
    @objc dynamic var customer_id = NSUUID().uuidString
    @objc dynamic var cash = 0.0
    let parent = LinkingObjects(fromType: BankClass.self, property: "customerList")

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

class BankClass: Object {
    @objc dynamic var bank_id = NSUUID().uuidString
    @objc dynamic var cash_balance = 0.0
    let customerList = List<CustomerClass>()

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

如您所见,存在定义为多对多的关系;银行可以有多个客户,一个客户可以有多个银行。这在这种情况下有效,将允许您将客户添加到银行并自动创建反向关系。

然后是将客户添加到列表中第一家银行的函数。如果有多家银行,您可能希望进行筛选以获取要将客户添加到的银行,但对于此示例,我们将假设只有一家银行

func addCustomerToFirstBank() {
    if let realm = gGetRealm() {
        let bankResults = realm.objects(BankClass.self)
        if let firstBank = bankResults.first {
            let customerToAdd = CustomerClass()
            customerToAdd.cash = 50
            try! realm.write {
                firstBank.customerList.append(customerToAdd)
            }
         }
    }
}

有几点需要注意:

为简洁起见,我们有一个单例,当调用 gGetRealm()

时,returns 是一个领域

我们正在使用一种技术,其中 swift 将为每家银行和客户创建一个唯一标识符作为他们的 ID。 id 的关键是它必须是唯一的,但它是什么并不重要,所以如果您更愿意使用递增索引,那也没关系。