具有关系的领域重复主键崩溃

时间:2018-12-12 17:02:44

标签: swift realm

我对关系和主键有疑问。 首先,让我展示一下我拥有的模型以及它们之间的关系:

  • 艺术家
    • 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
}

问题:我需要将专辑本身添加到领域吗?还是当我将其添加到我的艺术家时会自动添加到Realm?

与这个问题有关的是我的第二个问题。 这是我的导入代码:

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'.'崩溃

我对newArtistappendingAlbums进行以下操作:

realm.write {
  artist.albums.append(objectsIn: appendingAlbums)
  artist.albums.append(objectsIn: newAlbums)
}

现在,这与第一个问题有关。 appendingAlbums确实包含已经存在的相册(因此,我不想将其添加到领域中,因为它会崩溃)。 newAlbums包含新专辑,我想将它们写到领域。

那么如何将艺术家链接到appendingAlbumsnewAlbums中的专辑,却只将newAlbums写入领域?

谢谢

0 个答案:

没有答案