Swift Magical Record save Проблемы объектов в контекстах хранилища Core Data - PullRequest
0 голосов
/ 12 марта 2019

У меня есть синглтон, где я сохраняю экземпляр в моем плейлисте, который 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)

             }
        }

В этой реализации нет таких проблем с контекстом, но я не уверен, как его отладить или получить форму идеи, где возникает эта проблема с контекстами.

...