2016-05-13 3 views
0

Возможно ли обновить отношения объекта Realm, передав только идентификаторы отношений?Обновление отношений Realm с первичными идентификаторами

Если у меня есть Library класс, который имеет List<Books> отношения, и я хотел бы объединить два Libraries вместе, я полагаю, что можно было бы сделать так:

let bookIds = (firstLibrary.books.toArray() + secondLibrary.books.toArray).map { $0.id } 

Затем я использую ObjectMapper & SugarRecord:

let changes = ["books": bookIds] 
Mapper<T>().map(changes, toObject: secondLibrary) 
let realm = self.realm 
realm.add(secondLibrary, update: true) 

Но список книг не обновляется. Я предполагаю, что это потому, что ObjectMapper ничего не знает о первичных идентификаторах, и поэтому попытка сопоставить их с объектом не делает ничего.

Имеет ли Realm возможность обновления через первичный идентификатор? Если это произойдет, я бы с радостью переписал свой стек персистентности.

+0

Код, который вы опубликовали, немного неясен. Второй фрагмент кода вообще не относится ко всем идентификаторам объектов и ссылается на несколько разных переменных, типы которых не очевидны из контекста. Можете ли вы предоставить более подробную информацию о том, как выглядят ваши модели, и что вы пытаетесь с ними сделать? – bdash

ответ

1

Для дальнейшего использования: один обходной путь, который обсуждался на this Github issue, чтобы изменить код создания объекта в примере, например:

let books = ["1", "2"].map { realm.objectForPrimaryKey(Book.self, key: $0) } 
realm.create(Library.self, values: ["id": "4321", "books": books], update: true) 

Это не представляется возможным непосредственно передать список значений первичного ключа, как часть значения, переданного в API create(), для создания Library, и Realm автоматически создает или обновляет объекты Book, связанные с этими первичными ключами.

Вместо этого обходной путь сначала получает или создает Book объекты для каждого значения первичного ключа с помощью objectForPrimaryKey(), а затем создает Library с помощью этих Book объектов с помощью create().

+0

Это была проблема github, которую я открыл .... – barndog

+1

Да. Я просто хотел задокументировать ответ здесь, если у кого-то еще на SO есть тот же вопрос и он находит этот. – AustinZ

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