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的主要内容,如果未能解决你的问题,请参考以下文章
在 Share Extension (Swift) 中处理 NSItemProvider 数据类型
NSItemProvider loadItemForTypeIdentifier:options:completionHandler: 适用于任何类型的(二进制)文件