[英]How to get items from extension context in Share extension for iOS?
加載我的共享擴展后,並非每次都可以立即對用戶可見。 最常見的是在那里您可以看到圖像、圖像數量和內容文本。 然而,有些情況下有更多的信息。
我知道在SLComposeServiceViewController
有extensionContext
及其inputItems
屬性。
好的,所以我當時停止了調試器,並使用以下命令在控制台上打印出一些內容:
po (extensionContext!.inputItems[0] as! NSExtensionItem).userInfo![NSExtensionItemAttachmentsKey]
有兩個NSItemProvider
對象作為第一個NSExtensionItem
附件
好的,然后我打印出第一個附件:
NSItemProvider
和 url 獲取下一個圖像? 你能提供一些代碼嗎?我想我們會使用
loadItemForTypeIdentifier(_:options:completionHandler:)
但不知道如何。
import MobileCoreServices
有一個簡單的函數可以應用於您的代碼:
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.