CoreData Неоднозначная ссылка на идентификатор члена Xcode 12

У меня есть объект coredata с идентификатором атрибута типа String

при попытке сослаться на этот атрибут из ключевого пути выдает ошибку

let path = #keyPath(User.id) //Ambiguous reference to member 'id'

codegen установлен на определение класса.

Я попытался проверить сгенерированный файл для класса и обнаружил, что класс сущности теперь подтверждает Identifiable, что требует id

Я заметил, что установка цели развертывания на что-либо ниже iOS 13 решит проблему (но я не хочу этого делать)

Xcode версии 12.0 бета 4 (12A8179i)

Есть ли способ исправить это без отключения codegen или изменения цели развертывания?


person zombie    schedule 07.08.2020    source источник
comment
Попробуйте это на стабильной версии Xcode, у меня нет проблем с выполнением вышеописанного для аналогичного класса сущностей, который у меня есть, который соответствует идентифицируемому, когда целью является iOS 13, а Xcode - 11.6.   -  person Joakim Danielson    schedule 07.08.2020
comment
но если бы я использовал Xcode 11 (текущая стабильная версия), то я бы не смог разрабатывать для iOS 14 (бета-версия)   -  person zombie    schedule 07.08.2020
comment
Я не говорил вам переключиться, а проверить, работает ли он на Xcode 11, потому что тогда вы бы знали, что это из-за Xcode, но если он не работает и на Xcode 11, то это что-то с вашим кодом. Устранение неполадок для поиска причины.   -  person Joakim Danielson    schedule 07.08.2020
comment
да, я полностью понимаю, я просто объяснил, почему мне нужно, чтобы это работало, или альтернатива в Xcode 12, кстати, это работает в бета-версии Xcode 3, но не в бета-версии 4.   -  person zombie    schedule 07.08.2020


Ответы (1)


Просто обходной путь для этой проблемы заключается в использовании строкового представления Objective c необходимого пути к ключу.

например, если вы хотите создать предикат для идентификатора, то вместо

let ambiguousPredicate = NSPredicate(format: "%K = %@", #keyPath(User.id), id) 

ты можешь написать

let workingPredicate = NSPredicate(format: "%K = %@", (\User.id)._kvcKeyPathString!, id)
person zombie    schedule 07.08.2020
comment
Вы нашли лучший обходной путь для этой проблемы? У меня то же самое на моей стороне (версия Xcode 12.2 бета 4 (12B5044c)). - person alpennec; 06.11.2020
comment
Я не стал вникать в это больше. Я оставил вопрос без ответа, надеясь, что кто-нибудь ответит на него. - person zombie; 06.11.2020
comment
А пока мы можем использовать setPrimitiveValue(UUID().uuidString, forKey: id). Это менее элегантно, но работает. - person alpennec; 06.11.2020