Я пытаюсь расширить действие «Найти XYZ» моего Reading-AppEntity, чтобы принять фильтрацию для другого типа Meter-AppEntity. Итак, по сути, я хочу, чтобы все элементы, имеющие отношение Core Data, к одному и тому же объекту. Однако по какой-то причине фильтрация не работает должным образом и игнорирует тот AppEntity, который я выбираю для фильтрации.
Настройка
В моей базе данных есть Счетчик, который связан с Показаниями. Я соединил свои объекты Core Data с протоколом AppEntity, чтобы использовать его в ярлыках следующим образом:
struct ReadingEntity: AppEntity, Identifier { идентификатор переменной: UUID @Property(title: «Значение») Значение переменной: Double @Property(title: «Метр») вар readMeter: MeterEntity // Визуальное представление и прочее необходимое… // Создание IntentEntity из основного объекта данных init(из чтения: Чтение) { self.id = чтение.wrappedID self.value = чтение.значение // Ссылка на счетчик если letmeter = read.meterRelationship { self.readingMeter = MeterEntity (от: счетчик) } } } struct MeterEntity: AppEntity, Идентифицируемый { идентификатор переменной: UUID @Property(title: «Название») переменное название: String // … // Визуальное представление и прочее необходимое… // Создание IntentEntity из основного объекта данных init(из счетчика: Метр) { self.id =meter.wrappedID self.title =meter.wrappedTitle } } Для поддержки действия Найти чтение я реализовал параметры фильтра (помимо других необходимых вещей):
struct ReadingIntentQuery: EntityPropertyQuery { // Другие необходимые функции // Параметры фильтра статические свойства var = EntityQueryProperties { Property(\ ReadingEntity.$readingMeter) { EqualToComparator { NSPredicate(format: "readingMeter.id = %@", $0.id as CVarArg) } } } // Обработка фильтрации функциональные сущности( соответствующие компараторы: [NSPredicate], режим: ComparatorMode, sortedBy: [EntityQuerySort], предел: Int? ) асинхронные броски -> [ReadingEntity] { // Пользовательский предикат let predicate = NSCompoundPredicate (тип: режим == .and ? .and : .or, подпредикаты: компараторы) // Пользовательская обработка сортировки… вернуть попытку IntentsDataHandler.shared.getReadings (соответствие: предикат, sortedBy: sortDescriptors, предел: предел) } } Проблема Проблема, с которой я столкнулся, заключается в том, что независимо от того, какой Meter я выбираю в раскрывающемся списке Find Reading, EqualToComparator всегда возвращает идентификатор первого объекта Meter в раскрывающемся списке. По какой-то причине он даже возвращает этот первый идентификатор счетчика, даже если еще ничего не выбрано. Непонятно, почему выбор в действии фильтра здесь игнорируется...

Похоже на проблему с логикой. Хотя я не знаю, что я здесь делаю не так. Может быть кто-нибудь сможет помочь?
Мобильная версия