链接领域数据而不是复制
Linking Realm Data Instead of Copying
我在 Realm 数据库中查找 table(图书),其中包含可以从其他对象(下例中的 Person)引用的对象。此查找 table(图书)有一个主键 (id),当我尝试添加引用查找 table:
的记录时出现此错误
*** Terminating app due to uncaught exception 'RLMException', reason: 'Can't set primary key property 'id' to existing value 'xxx1234'
下面是一些示例代码:
// Models:
class Book: Object {
dynamic var id: String = ""
dynamic var title: String = ""
override static func primaryKey() -> String? {
return "id"
}
}
class Person: Object {
dynamic var name: String = ""
let booksRead = List<Book>()
}
// Controller Code:
func selectBooks(books: [Book]){
for book: Book in books {
self.person.booksRead.append(book);
}
let realm = try! Realm();
try! realm.write{
realm.add(self.person);
}
}
当 selectBooks 方法运行书籍数组时,realm 会尝试为用户选择的书籍创建新书籍。
如何让领域将书籍添加为对现有书籍的引用,而不是尝试创建新书籍?
如何在将对象插入列表之前将其添加到领域:
for book: Book in books {
self.realm.add(book, true)
self.person.booksRead.append(book)
}
如果您使用 add
方法,它将处理重复项并仅更新对象(如果它已经存在)。这是文档条目:https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm3addFS0_FTCS_6Object6updateSb_T_
我在 Realm 数据库中查找 table(图书),其中包含可以从其他对象(下例中的 Person)引用的对象。此查找 table(图书)有一个主键 (id),当我尝试添加引用查找 table:
的记录时出现此错误*** Terminating app due to uncaught exception 'RLMException', reason: 'Can't set primary key property 'id' to existing value 'xxx1234'
下面是一些示例代码:
// Models:
class Book: Object {
dynamic var id: String = ""
dynamic var title: String = ""
override static func primaryKey() -> String? {
return "id"
}
}
class Person: Object {
dynamic var name: String = ""
let booksRead = List<Book>()
}
// Controller Code:
func selectBooks(books: [Book]){
for book: Book in books {
self.person.booksRead.append(book);
}
let realm = try! Realm();
try! realm.write{
realm.add(self.person);
}
}
当 selectBooks 方法运行书籍数组时,realm 会尝试为用户选择的书籍创建新书籍。
如何让领域将书籍添加为对现有书籍的引用,而不是尝试创建新书籍?
如何在将对象插入列表之前将其添加到领域:
for book: Book in books {
self.realm.add(book, true)
self.person.booksRead.append(book)
}
如果您使用 add
方法,它将处理重复项并仅更新对象(如果它已经存在)。这是文档条目:https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm3addFS0_FTCS_6Object6updateSb_T_