链接领域数据而不是复制

时间:2015-12-01 21:39:29

标签: swift relationship realm

我在Realm db中有一个查找表(Book),其中包含可以从其他对象引用的对象(以下示例中的Person)。此查找表(Book)有一个主键(id),当我尝试添加引用查找表的记录时,我收到此错误:

  

***由于未捕获的异常终止应用' RLMException',原因:'无法设置主键属性' id'现有价值' 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方法与一系列书籍一起运行时,领域会尝试为用户选择的书籍创建新书。

如何添加图书作为对现有图书的参考,而不是尝试创建新图书?

1 个答案:

答案 0 :(得分:2)

在将对象插入列表之前,如何将对象添加到Realm中:

for book: Book in books {
    self.realm.add(book, true)
    self.person.booksRead.append(book)
}

如果使用add方法,它将处理重复项,只更新对象(如果已存在)。这是doc条目:https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm3addFS0_FTCS_6Object6updateSb_T_