iOS custom share extension: загрузить выбранное изображение


Я работаю над расширением общего доступа для моего приложения, чтобы иметь возможность использовать его для обмена изображениями непосредственно из библиотеки. У меня есть контроллер вида и макет, но я изо всех сил пытаюсь получить выбранное изображение, чтобы показать его в UIImageView внутри контроллера вида.

На данный момент мой getImage() выглядит следующим образом:

func getImage() {
    if let inputItem = extensionContext!.inputItems.first as? NSExtensionItem {
        if let itemProvider = inputItem.attachments?.first as? NSItemProvider {
            itemProvider.loadItem(forTypeIdentifier: kUTTypeJPEG as String) { [unowned self] (imageData, error) in
                if let item = imageData as? Data {
                    self.imageView.image = UIImage(data: item)

                }
            }
        }
    }
}

...но изображение не загружается. Что я здесь делаю не так?

1 2

1 ответ:

Нашел проблему. Оказалось, что сначала мне нужно было проверить соответствие идентификатора типа:

func getImage() {
    if let inputItem = extensionContext!.inputItems.first as? NSExtensionItem {
        if let itemProvider = inputItem.attachments?.first as? NSItemProvider {
            // This line was missing
            if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeJPEG as String) { 
                itemProvider.loadItem(forTypeIdentifier: kUTTypeJPEG as String) { [unowned self] (imageData, error) in
                    if let item = imageData as? Data {
                        self.imageView.image = UIImage(data: item)
                    }
                }
            }
        }
    }
}