【问题标题】:NSFileHandler returns nil for assets library video urlNSFileHandler 为资产库视频 url 返回 nil
【发布时间】: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 类及其加载图像的方法。

标签: ios objective-c assets alassetslibrary filehandle


【解决方案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 与库中的资产进行交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多