从核心数据中获取关系 swift 4

Fetching a relationship from core data swift 4

我有一个艺术家和专辑实体。我能够从 Album 实体中检索所有封面。但是我不知道如何只获取分配给特定艺术家的封面。据我所知,这应该有某种具有特定条件的谓词来检索它。 我正在尝试处理核心数据关系以从 Album 实体中检索封面属性。请参阅核心数据编辑器的附加屏幕。以及我要实现的代码。

var albums = [Album]()
    let request = NSFetchRequest<Album>(entityName: "Album")
    //request.predicate = NSPredicate(format: "recordArtist = %@", albums)
    do {
        albums = try context.fetch(request)
        for cover in albums {
            if ((currentArtist?.name) != nil){
                print(currentArtist.cover)
            }
        }
    }
    catch { print(error)
    }

entity album and artist

您可以通过实现基于艺术家姓名的简单谓词来实现这一点。见以下代码:

var albums = [Album]()
let request = NSFetchRequest<Album>(entityName: "Album")
request.predicate = NSPredicate(format: "recordArtist.name = %@", "<ProvideArtistNameHere>")
do {
    albums = try context.fetch(request)
    if albums.count > 0 {
        // You have found cover
    }
}
catch {
    print("Error = \(error.localizedDescription)")
}

此代码将根据艺术家姓名获取您的完整专辑。从专辑中你可以得到封面。

希望对您有所帮助。

在您的代码中,我看到您有一个 Artist 实例 currentArtist,这意味着您不需要执行新的提取请求,而是使用该关系来获取专辑封面。

let albumSet = currentArtist.albums
let covers = albumSet.map([=10=].cover)

covers 数组现在将包含艺术家的所有封面。