У меня есть синглтон, где я сохраняю экземпляр в моем плейлисте, который PlaylistEntity
извлекается из CoreData с использованием Magical Record. На каком-то этапе я обновляю свой плейлист новой песней и хочу сообщить базе данных об этих изменениях через MagicalRecord.save
func. Но когда я делаю это, я получаю ошибку, связанную с различными контекстами:
'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'songs' between objects in different contexts (source = <NSManagedObject: 0x600001180370> (entity: PlaylistEntity; id: 0xccee757febde9044 <x-coredata://947D51FC-9DA9-4E88-9862-2E4EAA992612/PlaylistEntity/p1> ; data: {
Вот мой код:
func updateStorage(with playlist: PlaylistEntity, completion: ((Error?) -> Void)? = nil) {
MagicalRecord.save({ context in
guard let storedPlaylist = PlaylistEntity.mr_findFirst(in: context) else {
return
}
storedPlaylist.songs = playlist.songs
}
}
Вот мой класс воспроизведения:
open class PlaylistEntity: NSManagedObject {
@NSManaged open
var songs: Set<Songs>
}
Итак, как вы видите, я пытаюсь поставить songs
на songs
, но не уверен, на каком этапе у меня возникла эта проблема контекста.
В целях тестирования я также реализовал расширение, которое работает для меня, но не уверен, что это лучшее решение или нет:
extension PlaylistEntity {
@objc(addSongs:)
@NSManaged public func addToSongs(_ values: NSSet)
}
и я использую это так:
func updateStorage(with playlist: PlaylistEntity, completion: ((Error?) -> Void)? = nil) {
MagicalRecord.save({ context in
guard let storedPlaylist = PlaylistEntity.mr_findFirst(in: context) else {
return
}
let songs = NSMutableSet(set: storedPlaylist.songs)
storedPlaylist.addToSongs(songs)
}
}
В этой реализации нет таких проблем с контекстом, но я не уверен, как его отладить или получить форму идеи, где возникает эта проблема с контекстами.