swift - 链接 Realm 数据而不是复制

标签 swift relationship realm

我在 Realm 数据库中有一个查找表(书籍),其中包含可以从其他对象(下面示例中的人)引用的对象。此查找表 (Book) 有一个主键 (id),当我尝试添加引用查找表的记录时出现此错误:

*** 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 会尝试为用户选择的书籍创建新书籍。

如何让 Realm 将书籍添加为对现有书籍的引用,而不是尝试创建新书籍?

最佳答案

如何在将对象插入列表之前将其添加到 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_

关于swift - 链接 Realm 数据而不是复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34030692/

相关文章:

ios - 使用 createOrUpdate 的 Realm 部分更新不起作用

android - Float 是 Realm 比较的无效字段

ios - Swift:UIGraphicsBeginImageContextWithOptions 比例因子设置为 0 但未应用

java - 您能否将 Kotlin 接口(interface)的范围限定为仅与某些类一起使用?

php - Laravel - 多对多

c# - 在 C# 中创建与 Access 数据库的一对一关系的问题

ios - CoreData故障-如何获取数据

ios - 在 Realm Swift 中声明一个 Int 数组

ios - HTML 不尊重 UIWebView 中的 .CSS 文件

swift - 使用 Swift 检测 MacBook 盖子的打开/关闭?