Действие «Найти X» с параметром фильтра, принимающим динамический AppEntityIOS

Программируем под IOS
Ответить
Anonymous
 Действие «Найти X» с параметром фильтра, принимающим динамический AppEntity

Сообщение Anonymous »


Я пытаюсь расширить действие «Найти 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 в раскрывающемся списке. По какой-то причине он даже возвращает этот первый идентификатор счетчика, даже если еще ничего не выбрано. Непонятно, почему выбор в действии фильтра здесь игнорируется...

Изображение

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»