私はビデオにアクセスするためにオンデマンドリソースを使用しています。
が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];
}
}];
メインスレッドのデータに実際にアクセスする前に、リクエストオブジェクトの割り当てが解除されているようです。あたりとして、ドキュメント:
endAccessingResources()の呼び出し後、またはリソース要求オブジェクトの割り当てが解除された後、管理は終了します。
したがって、リクエストへの参照を保持するか、リソースに同期的にアクセスする必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加