我正在使用点播资源来访问视频。
我成功获取了资源,因为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/