NSExtension - Share - 限制仅限视频或仅限图片

问题描述 投票:8回答:2

我的应用程序中有一个扩展程序,允许用户选择他们的“照片/图片”应用程序的图片或视频,以便在我的应用程序中发布。

通过执行以下操作,我将图片数量限制为20,视频限制为1:enter image description here

但是,我希望我的用户选择多个图片或只选择一个视频,这是此配置无法实现的。

我看过这篇文章:NSExtension Share Extension limit Photos count

他们解释说我可以做一个自定义验证规则,但我不知道如何编写它。是否有其他激活参数或有人可以帮助编写规则?

提前致谢!

ios swift info.plist
2个回答
1
投票

这是一个有效的答案,奇怪的是我没有设法使逻辑条件(AND / OR)在一个子查询中工作,所以我不得不拆分它:

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
    ).@count == 1
    AND
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count == 0
).@count == 1
OR
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
    ).@count == 0
    AND
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count <= 20
).@count >= 1

7
投票

Apple提供了一个选项来执行您想要的操作。我们可以看一下这里的文档:

https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW8

我将UTI-CONFORMS-TO项目修改为视频和图像,并且计算了一下:

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count <= 20
).@count >= 1
OR
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.video"
    ).@count == 1
).@count == 1

此查询应将选择限制为仅1个视频或1到20个图像。请注意,您应该像下面这样指定此查询:

<key>NSExtensionAttributes</key>
<dict>
    <key>NSExtensionActivationRule</key>
    <string>
    --- SUBQUERY HERE ---
    </string>
</dict>

我没有测试这段代码,它可能无法完全发挥作用,但它会指向正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.