У меня вопрос об отношениях и о первичных ключах.Прежде всего, позвольте мне показать имеющиеся у меня Модели и как они связаны друг с другом:
- Исполнитель
let albums = List<Album>()
- Альбом
let artists = LinkingObjects(fromType: Artist.self, property: "albums")
Означает, что у одного исполнителя есть несколько альбомов, а у одного альбома может иметь несколько исполнителей.
Мой первый вопрос об отношениях следующий:
// create the realm
let realm: Realm = try! Realm()
// create the artist
let artist: Artist = Artist()
realm.write {
realm.add(artist)
}
// creating the album
let album: Album = Album()
realm.write {
artist.albums.append(album) // appending album
}
Вопрос: Нужно ли добавлять сам альбом в область?Или он будет добавлен в Царство автоматически, когда я добавлю его в моего художника?
С этим вопросом связан мой второй вопрос.Вот мой код импорта:
let createdAlbums: [Album] = [...] // let's assume it is not empty, but all objects in there are in memory
let newAlbums = createdAlbums.filter({ (createdAlbum: Album) -> Bool in
if let album = AlbumManager.object(for: createdAlbum.identifier) {
if !artist.albums.contains(album) {
appendingAlbums.append(album)
}
return false
}
return true
})
А вот AlbumManager.object(for: createdAlbum.identifier)
static func object(for identifier: String) -> ModelObject? {
return DatabaseManager.shared.getObject(of: ModelObject.self, for: identifier)
}
// DatabaseManager
public func getObject<Element: Object, KeyType>(of type: Element.Type, for key: KeyType) -> Element? {
return self.realm.object(ofType: type, forPrimaryKey: key)
}
Итак, по сути, я проверяю, есть ли альбом, уже сохраненный в области.Если так, это НЕ будет в newAlbums
.Однако, если исполнитель не содержит альбом (что означает, что этот исполнитель уже добавлен другим исполнителем, и этот исполнитель является его частью, по сути, несколькими исполнителями), я добавляю его в «для добавления в альбом этого исполнителя».
Проблема: мое приложение вылетает с 'Attempting to create an object of type 'Album' with an existing primary key value '1256125521'.'
Я делаю следующее с newArtist
и appendingAlbums
:
realm.write {
artist.albums.append(objectsIn: appendingAlbums)
artist.albums.append(objectsIn: newAlbums)
}
Теперь это относится к первому вопросу,appendingAlbums
содержит альбомы, которые уже существуют (поэтому я не хочу добавлять их в область, потому что она вылетит).newAlbums
содержит новые альбомы, и я хочу записать их в область.
Так как я могу связать исполнителя с альбомами в appendingAlbums
и newAlbums
, но только написать newAlbums
вцарство?
Спасибо