我正在建立具有一对多关系的应用程序。我不能在课堂上添加行。
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)
}
答案 0 :(得分:1)
您问题中的代码确实相距不远,因此我们将对其稍加整理,以助您一臂之力。
首先,让我们定义客户和银行类别
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()时,我们有一个单例返回一个领域
我们正在使用一种技术,其中swift将为每个银行和客户创建唯一的标识符作为其ID。 id的关键是它必须是唯一的,但实际上并不重要,因此如果您更愿意使用递增索引,也可以。