簡體   English   中英

如何從 iOS 共享擴展中的擴展上下文中獲取項目?

[英]How to get items from extension context in Share extension for iOS?

加載我的共享擴展后,並非每次都可以立即對用戶可見。 最常見的是在那里您可以看到圖像、圖像數量和內容文本。 然而,有些情況下有更多的信息。

  • 如何訪問它們?

我知道在SLComposeServiceViewControllerextensionContext及其inputItems屬性。

好的,所以我當時停止了調試器,並使用以下命令在控制台上打印出一些內容:

 po (extensionContext!.inputItems[0] as! NSExtensionItem).userInfo![NSExtensionItemAttachmentsKey]
  • 這是正確的方法嗎?
  • 通常有一個輸入項嗎?

有兩個NSItemProvider對象作為第一個NSExtensionItem附件

在此處輸入圖片說明

好的,然后我打印出第一個附件:

在此處輸入圖片說明

  • 如何從那個NSItemProvider和 url 獲取下一個圖像? 你能提供一些代碼嗎?

我想我們會使用

loadItemForTypeIdentifier(_:options:completionHandler:)

但不知道如何。

  1. import 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 }) } } } } }

所以現在您知道使用loadItemForTypeIdentifier(_:options:completionHandler:)方法來加載您想要的數據。

在您的快照中,您希望獲取圖像和 url 對象。

讓我們開始。

guard
  let items = extensionContext?.inputItems as? [NSExtensionItem],
  let item = items.first,
  let attachments = item.attachments
else { return }

var image: UIImage?
var url: URL?

let semaphore = DispatchSemaphore(value: 2)
for attachment in attachments {
  if attachment.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {
    attachment.loadItem(forTypeIdentifier: kUTTypeImage as String) { item, _ in
      image = item as? UIImage
      semaphore.signal()
    }
  }

  if attachment.hasItemConformingToTypeIdentifier(kUTTypeURL as String) {
    attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) { item, _ in
      url = item as? URL
      semaphore.signal()
    }
  }
}

_ = semaphore.wait(timeout: .now() + 1.0)

print(String(describing: image))
print(String(describing: url))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM