NSExtension - 分享 - 仅将类型限制为视频或图片

Posted

技术标签:

【中文标题】NSExtension - 分享 - 仅将类型限制为视频或图片【英文标题】:NSExtension - Share - Limit type only to video or only to pictures 【发布时间】:2018-11-29 16:23:18 【问题描述】:

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

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

但是,我希望我的用户选择多张图片只选择一个视频,这在此配置中是不可能的。

我已阅读这篇文章:NSExtension Share Extension limit Photos count

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

提前致谢!

【问题讨论】:

【参考方案1】:

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>

我没有测试此代码,它可能无法完全正常工作,但它会为您指明正确的方向。

【讨论】:

感谢您的解释。但是我想将其限制为 1 个视频或 20 个图像。不是一个或一个。如果我删除最后一个@count == 1,它会在我的 Info.Plist 中受到其他限制,还是我可以添加 5 个视频? 我明白了,这对我来说不是很清楚。给我一些时间,我会更新我的答案:) 我刚刚意识到我在描述中犯了一个错误。我编辑问题。很抱歉! 看一下,我更新了答案。 (它会给你指明一个方向,我无法测试它)【参考方案2】:

这是一个有效的答案,奇怪的是我没有设法使逻辑条件(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 &lt;= 20
).@count &gt;= 1

【讨论】:

你在哪里写上面的代码,我在 NSExtensionActivationRule 下的 exetnsion 的 info.plist 中写,就像在 子查询之间 但我在 xcode 中遇到错误,说无法读取文件中的属性列表 我把这段代码放在我的扩展的 info.plist 中,如下所示: NSExtensionNSExtensionAttributesNSExtensionActivationRule SUBQUERY

以上是关于NSExtension - 分享 - 仅将类型限制为视频或图片的主要内容,如果未能解决你的问题,请参考以下文章

仅将 Spring 页面视图限制为 POST

Echo Nest API:仅将曲目限制为一个桶

仅将 API URL 限制为 Android 应用程序

SVN 限制用户仅将文件添加到存储库

仅将 S3 对象 URL 限制为网站上的登录用户

仅将inputText值限制为字母字符