ios - 如何从 iOS 的共享扩展中的扩展上下文中获取项目?

标签 ios swift xcode ios8-share-extension

一旦加载了我的共享扩展,用户不会立即看到所有内容。最常见的是在那里您可以看到图像、图像数量和内容文本。但是,在某些情况下,会有更多信息。

  • 如何访问它们?

我知道在 SLComposeServiceViewController 中有 extensionContext 及其 inputItems 属性。

好的,所以我及时停止了调试器,并使用以下命令在控制台上打印出一些东西:

po (extensionContext!.inputItems[0] as! NSExtensionItem).userInfo![NSExtensionItemAttachmentsKey]
  • 这样做是否正确?
  • 通常只有一个输入项吗?

有两个 NSItemProvider 对象作为第一个 NSExtensionItem 的附件

enter image description here

好的,那我打印出第一个附件:

enter image description here

  • 如何从 NSItemProvider 获取该图像并从下一个获取 url?您能提供一些代码吗?

我想我们会用

loadItemForTypeIdentifier(_:options:completionHandler:)

但不知道怎么做。

最佳答案

  1. 导入 MobileCoreServices

  2. 有一个简单的函数可以应用到您的代码中:

    private func fetchAndSetContentFromContext() {
    
        guard let extensionItems = extensionContext?.inputItems as? [NSExtensionItem] else {
            return
        }
    
        for extensionItem in extensionItems {
            if let itemProviders = extensionItem.attachments as? [NSItemProvider] {
                for itemProvider in itemProviders {
                    if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeText as String) {
    
                        itemProvider.loadItemForTypeIdentifier(kUTTypeText as String, options: nil, completionHandler: { text, error in
    
                        })
                    }
                }
            }
        }
    }
    

关于ios - 如何从 iOS 的共享扩展中的扩展上下文中获取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539910/

相关文章:

IOS如何彻底删除一个View

ios - 如何让用户知道我的应用程序没有在后台运行?

iphone - 在Mac 10.7.2上安装xCode-我需要知道xcode的版本

ios - 设备方向在标签栏应用程序中启动所有 View Controller

ios - 为什么 Images.xcassets 不接受我的 jpeg?

ios - Swift - 多个 UI 更改相互阻塞

ios - 使用 beginUpdates/endUpdates 从 tableview 中删除行

ios - 处理大量的 Swift 类

ios - 将日期字符串转换为日期对象

ios - 1 个 ViewController 中的 2 个 UITableViews。将 Delegate 和 DataSource 设置为不同的 UITableViewController 文件