gpt4 book ai didi

swift - Swift 关系中的 Realm 不添加行

转载 作者:行者123 更新时间:2023-11-28 05:42:11 25 4
gpt4 key购买 nike

我正在构建具有一对多关系的应用程序。我无法在类(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() 时返回一个 Realm 的单例

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

关于swift - Swift 关系中的 Realm 不添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56243350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com