首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含多个文件的UIApplicationDelegate openURL

包含多个文件的UIApplicationDelegate openURL
EN

Stack Overflow用户
提问于 2019-10-25 22:06:37
回答 1查看 245关注 0票数 4

我正在尝试允许我的应用程序同时打开多个文件-例如,使用文件应用程序选择多个文件,然后按“在我的应用程序中打开”。当我尝试这样做时,果然UIApplicationDelegate openURL会在我的应用程序中触发,但我只得到了一个URL。有没有办法获得所有的文件,而不只是其中的一个?

EN

回答 1

Stack Overflow用户

发布于 2020-11-25 15:09:03

你的观察是正确的,使用openURL调用你将只得到一个文件。这个问题的替代解决方案是实现一个操作扩展。

  1. 在操作扩展中,您可以迭代所有的文件项,
  2. 在您的应用程序的共享空间中创建文件的副本。
  3. 和创建一个字符串与逗号分隔的文件URL
  4. ,并使用您的应用程序的自定义URL发送此字符串对象(base64编码或任何其他加密格式)到您的应用程序。对于ex: app://filesaction/
  5. In,您可以解码/解密从操作扩展接收到的字符串(URL的最后一个组成部分)。并根据自己的意愿使用文件列表。

官方开放URL调用不允许来自操作扩展,但您可以迭代响应器链,并可以使用它打开您的应用程序:

代码语言:javascript
复制
 let selectorOpenURL = sel_registerName("openURL:")
      while (responder != nil){
            if responder?.responds(to: selectorOpenURL) == true{
             responder?.perform(selectorOpenURL, with: url)
            }
        responder = responder!.next
        }

编辑:

对评论中提出的几点的回答:

  1. OpenURL技巧将来可能会被打破:如果你搜索这个问题,你会发现许多应用程序都在使用相同的问题。没有使用任何私有的API,我不确定,我猜只有当有很多可用的动作扩展时,才会发生less
  2. Manually启用的部分。当我们支持操作扩展时并没有面临手动启用的情况。
  3. Google Drive和你提到的其他应用程序都使用共享扩展来实现相同的功能,你也可以使用共享扩展。如果你观察到这些应用程序没有切换到主应用程序,在主机应用程序上呈现扩展UI,并且在没有切换到主app.
  4. Basically的情况下执行任务,则苹果的指导方针共享扩展和操作扩展不应该打开主应用程序。
  5. 最后一个问题是有效的,在这种情况下,如果你为你的应用程序启用了共享扩展,而不是你应该去共享扩展。你的应用程序将不会出现(从iOS 14开始,更早的时候两者都有:应用程序共享扩展和openURL的应用程序openURL (复制到应用程序))。基本上,共享扩展将从共享工作表中的应用程序图标触发。

摘要:您可以通过实现共享扩展来避免OpenURL的棘手部分,这将解决用户使用OpenURL而不是操作扩展的问题。但是,如果您使用大量内存,这可能会实现,因为共享扩展和操作扩展具有有限的内存访问。在这种情况下,您可能希望切换到您的主应用程序(OpenURL技巧)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58560147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档