NSExtensionActivationRule для точного одного изображения или видео — расширение приложения для iOS

Я создаю приложение с расширением действия. Для этого расширение должно включаться только в том случае, если пользователь выбирает одно видео или одно изображение (оно может обрабатывать один файл/объект одновременно). Я получил предикат NSExtensionActivationRule из документация Apple Вот так,

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.action-one" ||
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.action-two"
    ).@count == $extensionItem.attachments.@count
).@count == 1

И в документации сказано

Этот оператор перебирает массив объектов NSExtensionItem и, во вторую очередь, массив вложений в каждом элементе расширения. Для каждого вложения предикат оценивает универсальный идентификатор типа (UTI) для каждого представления в вложении. Когда UTI представления вложения соответствует любому из двух разных указанных UTI (которые вы видите в правой части каждого оператора UTI-CONFORMS-TO), соберите этот UTI для окончательного сравнительного теста. Последняя строка возвращает TRUE, если расширению приложения было предоставлено ровно одно вложение элемента расширения с поддерживаемым UTI.

Я изменил org.appextension.action-two и org.appextension.action-one на public.image и public.movie.

Но все же расширение включено, даже если я выбираю несколько видео или изображений. Что не так с предикатом.


person Johnykutty    schedule 21.01.2016    source источник


Ответы (1)


Условие @count == $extensionItem.attachments.@count означает, что оно вернет true, если все вложения являются изображениями и видео, и не имеет значения, сколько их, чтобы ограничить его только 1, измените это на @count == 1

person Ali Sufian    schedule 27.12.2016