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模板预览时崩溃问题的解决

Xcode 7 中的 CoreData 类

“AppDelegate”类型的IOS开发值没有成员“managedObjectContext”Xcode 10

最新Xcode 13.3RC对SwiftUI和CoreData中两个恼人问题的修复

最新Xcode 13.3RC对SwiftUI和CoreData中两个恼人问题的修复

iPhone CoreData 属性:对 managedObjects 的更改太慢