2015-12-01 7 views
0

У меня есть таблица поиска (книга) в Realm db, которая содержит объекты, на которые можно ссылаться от других объектов (Person в приведенном ниже примере). Эта таблица поиска (книга) имеет первичный ключ (ID), и я получаю эту ошибку, когда я пытаюсь добавить запись, которая ссылается на таблице поиска:Связывание данных в реальном времени вместо копирования

*** Нагрузочного приложение из-за неперехваченное исключение «RLMException» , причина: «не удается установить первичный ключ свойства„идентификатор“к существующему значению„“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 пытается создать новые книги для избранных пользователем.

Как я могу получить книги, чтобы добавить книги в качестве ссылок на существующие книги, а не пытаться создавать новые книги?

ответ

2

Как насчет добавления объекта в 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_

+0

Спасибо за ссылку на документацию ... Я не знал, что это было там. это сработало. – dwaz

Смежные вопросы