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 请求处理程序