ios - 成功完成NSBundleResourceRequest之后,NSURL为零

标签 ios

我正在使用点播资源来访问视频。

我成功获取了资源,因为conditionallyBeginAccessingResourcesWithCompletionHandler返回resourcesAvailable == YES

然后,我可以访问资源的URL。但是,我需要访问主线程上的URL,因为它是视频并且需要在UIView中显示。当我切换到主线程并尝试访问URL时,它为nil。

我也尝试过将非nil URL从完成处理程序线程传递到主线程,但是访问视频仍然没有运气。

这是一个代码示例:

NSBundleResourceRequest * request = [self resourceRequest];

[request conditionallyBeginAccessingResourcesWithCompletionHandler:^(BOOL resourcesAvailable) {
    if (resourcesAvailable) {

        NSURL * url = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"mov"];
        /// url is non-nil here. 

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{                       
            NSURL * urlOnMainThread = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"mov"];
            //urlOnMainThread is nil!                
        }];
} else {
    NSLog(@"resources unavailable, initiating download");
    [self requestVideo];
    }
}];

最佳答案

在实际访问主线程中的数据之前,您的请求对象似乎已被释放。根据docs:

调用endAccessingResources()或释放资源请求对象后,管理结束。

因此,您需要保留对您的请求的引用,或者同步访问资源。

关于ios - 成功完成NSBundleResourceRequest之后,NSURL为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53506186/

相关文章:

ios - 调用presentModalView后ViewController viewDidLoad?

ios - 无法在 iTunesConnect 上创建新应用

iOS - 应用程序可以在设备上运行但不能在模拟器上运行(不再)

ios - 如何在CoreData中正确添加大数据集?

objective-c - 应用程序在渲染期间进入后台时 AVAssetWriter 失败

ios - App进入后台判断当前ViewController

ios - 来自 "24:00"字符串的 DateFormatter 返回 Nil

objective-c - writeToFile 没有写入文件

objective-c - Facebook 连接登录对话框崩溃的应用程序

ios - iPhone 6 上的拉伸(stretch)界面