CoreData 对成员“id”Xcode 12 的模糊引用
Posted
技术标签:
【中文标题】CoreData 对成员“id”Xcode 12 的模糊引用【英文标题】:CoreData Ambiguous reference to member 'id' Xcode 12 【发布时间】:2020-11-27 17:15:25 【问题描述】:我有一个核心数据实体,其属性 id 为 String 类型
当试图从键路径中引用该属性时,它会引发错误
let path = #keyPath(User.id) //Ambiguous reference to member 'id'
codegen 设置为 Class Definition。
我尝试检查该类的生成文件,发现实体类现在确认为Identifiable
,这需要id
我注意到将部署目标设置为低于 ios 13 的任何版本都可以解决问题(但我不想这样做)
Xcode 版本 12.0 beta 4 (12A8179i)
有没有办法在不禁用代码生成或更改部署目标的情况下解决此问题?
【问题讨论】:
在稳定版本的 Xcode 上试一下,在目标是 iOS 13 并且 Xcode 是 11.6 时,我在一个符合 Identifiable 的类似实体类上执行上述操作没有问题 但如果我使用 Xcode 11(当前稳定版),那么我将无法为 iOS 14(测试版)进行开发 我没有告诉你切换,而是测试它是否适用于 Xcode 11,因为那样你就会知道这是因为 Xcode 但如果它也不能在 Xcode 11 上运行,那么它就是用你的代码。对问题进行故障排除以查找原因。 是的,我完全理解我只是解释了为什么我需要它在 Xcode 12 上工作或替代它在 Xcode beta 3 上的工作方式而不是在 beta 4 上工作 【参考方案1】:解决这个问题的方法是使用Objective c 字符串表示所需的关键路径。
例如,如果你想为 id 创建一个谓词,那么而不是
let ambiguousPredicate = NSPredicate(format: "%K = %@", #keyPath(User.id), id)
你可以写
let workingPredicate = NSPredicate(format: "%K = %@", (\User.id)._kvcKeyPathString!, id)
【讨论】:
您找到解决此问题的更好方法了吗?我这边也有同样的情况(Xcode 版本 12.2 beta 4 (12B5044c))。 我没有仔细研究它。我没有回答这个问题,希望有人会回答它 同时,我们可以使用 setPrimitiveValue(UUID().uuidString, forKey: "id")。它不太优雅,但很有效。以上是关于CoreData 对成员“id”Xcode 12 的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 12.2+生成SwiftUI 2.0 CoreData模板预览时崩溃问题的解决
“AppDelegate”类型的IOS开发值没有成员“managedObjectContext”Xcode 10
最新Xcode 13.3RC对SwiftUI和CoreData中两个恼人问题的修复