CoreData 对成员“id”Xcode 12 的不明确引用

zom*_*bie 6 core-data ios codegen swift xcode12

我有一个属性 id 为 String 类型的 coredata 实体

尝试从关键路径引用该属性时会引发错误

let path = #keyPath(User.id) //Ambiguous reference to member 'id'
Run Code Online (Sandbox Code Playgroud)

代码生成器设置为类定义。

我试图检查类的生成文件,我发现实体类现在确认Identifiable需要id

我注意到将部署目标设置为低于 iOS 13 的任何内容都会解决这个问题(但我不想这样做)

Xcode 12.0 测试版 4 (12A8179i)

有没有办法在不禁用代码生成或更改部署目标的情况下解决这个问题?

zom*_*bie 10

解决此问题的唯一方法是使用所需关键路径的 Objective C 字符串表示形式。

例如,如果您想为 id 创建谓词,那么而不是

let ambiguousPredicate = NSPredicate(format: "%K = %@", #keyPath(User.id), id) 
Run Code Online (Sandbox Code Playgroud)

你可以写

let workingPredicate = NSPredicate(format: "%K = %@", (\User.id)._kvcKeyPathString!, id)
Run Code Online (Sandbox Code Playgroud)