关系属性计数的keyPath

Fre*_*ust 2 core-data nspredicate nsfetchedresultscontroller swift

我正在尝试为获取的结果控制器创建NSPredicate,控制器应该只观察具有关系的对象(其中它不是nil)以及关系的计数大于0的位置.

我已经看到如何使用字符串作为谓词的参数:

[NSPredicate predicateWithFormat:@"excludedOccurrences.@count == 0"];
Run Code Online (Sandbox Code Playgroud)

来自:https://stackoverflow.com/a/1195519/4096655

但我试图摆脱文字字符串,所以我想使用一个关键路径.

例:

import UIKit
import CoreData

class Animal: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var friends: NSSet?
}

let keyPath = #keyPath(Animal.friends.count)
Run Code Online (Sandbox Code Playgroud)

导致错误:对成员'count'的模糊引用

Mar*_*n R 6

#keyPath不了解@count运营商.但是您可以将它用于"Animal.friends"键路径并附加到@count 谓词格式字符串中:

NSPredicate(format: "%K.@count = 0", #keyPath(Animal.friends))
Run Code Online (Sandbox Code Playgroud)