NSFileHandler 为资产库视频 url 返回 nil

Posted

技术标签:

【中文标题】NSFileHandler 为资产库视频 url 返回 nil【英文标题】:NSFileHandler returns nil for assets library video url 【发布时间】:2015-01-29 07:24:58 【问题描述】:

这就是我的资产库视频 URL,assets-library://asset/asset.mov?id=6EDBB011-3C29-4502-A688-5467E420376A&ext=mov

但是当我将此 URL 传递给 NSFileHandler 时,它返回 nil 并出错。

 NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingFromURL:mediaURL error:&error];

错误是,

Error Domain=NSCocoaErrorDomain Code=2 "无法执行该操作 完全的。 (Cocoa 错误 2.)" UserInfo=0x15dbc0c0 NSFilePath=/asset.mov。

如何解决这个问题?

【问题讨论】:

显示你是如何获取 url 的? 您不能以这种方式加载 alasset 库资产。您需要使用 ALAssetLibrary 类及其加载图像的方法。 【参考方案1】:

该 URL 仅在分配 AlassetsLibrary 时有效。当您尝试使用文件句柄访问 url 时,检查您的 ALAssetsLibrary 是否仍然不为零。

已添加

在这种情况下,您可以使用singleton 模式。

.h

@interface AssetsHelper : ALAssetsLibrary
+ (ALAssetsLibrary *)shared;
@end

.m

@implementation AssetsHelper
+ (ALAssetsLibrary *)shared 
    static ALAssetsLibrary *library = nil;
    static dispatch_once_t onceToken = 0;
    dispatch_once(&onceToken, ^
        library = [[ALAssetsLibrary alloc] init];
    );
    return library;

@end

然后,无论您调用[ALAssetsHelper shared],您都可以获得相同的ALAssetsLibrary 实例。

【讨论】:

我从另一个班级发送的那个 URL。 使用相同的 URL 我在 Instagram 应用程序中打开该视频。如果 URL 无效,它如何在 Instagram 应用中打开?【参考方案2】:

我通过将资源库视频保存到临时位置并使用该位置路径到 NSFileHandle 解决了这个问题。我想它不可能将断言 URl 路径发送到 NSFileHandle。

【讨论】:

糟糕的解决方案,因为它不必要地复制文件。正如 Midhun MP 所说,您必须使用 ALAssetLibrary 与库中的资产进行交互。

以上是关于NSFileHandler 为资产库视频 url 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

React-Native Camera 错误 - 没有为资产库找到合适的 URL 请求处理程序

如何将视频保存到相机胶卷并获取资产 URL?

哪些视频格式与资产库兼容?

Swift - 检查 url 资产是不是有声音

React Native 0.26 显示资产库中的图像时找不到合适的图像 URL 加载器

获取新创建资产的 URL,iOS 9 风格