iOS8 扩展 NSItemProvider UIImage 通过 ALAssetsLibrary 到 ALAsset

Posted

技术标签:

【中文标题】iOS8 扩展 NSItemProvider UIImage 通过 ALAssetsLibrary 到 ALAsset【英文标题】:iOS8 extension NSItemProvider UIImage to ALAsset via ALAssetsLibrary 【发布时间】:2014-11-17 14:39:04 【问题描述】:

我有一个支持图像的共享扩展。 一切正常,我从项目提供者那里得到图像,如下所示:

if([imageItemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage])

    [imageItemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error)
     
         if(image)
         
             // do smth with the image here
         
     ];

问题是我想通过 ALAssetsLibrary 访问图像信息,但我没有它的 URL,因为 loadItemForTypeIdentifier 直接返回 UIImage。知道如何获取图像 URL 吗?

【问题讨论】:

【参考方案1】:

更改[imageItemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error)

[imageItemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(NSURL *url, NSError *error)

注意完成处理程序参数类型。这会将您正在查找的网址返回给您。

【讨论】:

好吧,这太神奇了。当我第一次看到这个时,我认为没有办法,但它被连根拔起,文档证实了这一点,就像使用它一样。他们要么对块进行一些运行时检查,要么对编译器进行巫术。 真的很酷!这是肯定的,但实施起来并不难。 Introspection [NSObject isKindOfClass:] 就是这样一种解决方案。

以上是关于iOS8 扩展 NSItemProvider UIImage 通过 ALAssetsLibrary 到 ALAsset的主要内容,如果未能解决你的问题,请参考以下文章

从 NSItemProvider 获取文件名/路径

在 Share Extension (Swift) 中处理 NSItemProvider 数据类型

NSItemProvider loadItemForTypeIdentifier:options:completionHandler: 适用于任何类型的(二进制)文件

键盘扩展:是不是可以从股票 iOS 键盘继承功能和 UI?

拖放 - 从我的模型创建一个 NSItemProvider

如何获取 NSItemProvider 提供的实际数据/内容而不是类型