ios 某些用户无法使用按需资源
ios On-Demand Resources some user doesn't work
我将按需资源添加到我的应用程序并发布到应用程序商店。
我的部分用户有问题,资源下载完成时调用的块 completionHandler 不会发生。
它不依赖于光盘 space。
在大多数情况下它都能正常工作。
一旦我遇到同样的问题,我重置我的iPhone内容,重新安装应用程序,问题就没有了。
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSSet *tags = [NSSet setWithObjects: self.exerciseId, nil];
resourceRequest = [[NSBundleResourceRequest alloc] initWithTags:tags];
[resourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:
^(BOOL resourcesAvailable)
{
if (resourcesAvailable) {
dispatch_async(dispatch_get_main_queue(), ^{
[self setupMoviePlayerVideoWithName:_exerciseId];
});
}
else {
[self tryToGetODR];
}
}];
}
-(void) tryToGetODR{
resourceRequest.loadingPriority = NSBundleResourceRequestLoadingPriorityUrgent;
[resourceRequest beginAccessingResourcesWithCompletionHandler: ^(NSError * __nullable error){
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
return;
}
[self.videoImageView setHidden:true];
[self.activityIndikator setHidden:true];
[self.downloadProgressLabel setHidden:true];
[self setupMoviePlayerVideoWithName:_exerciseId];
});
}];
}
有人遇到过类似情况吗?
问题的零星性质立即暗示线程问题。事实上,你有一个。变化:
else {
[self tryToGetODR];
}
至:
else {
dispatch_async(dispatch_get_main_queue(), ^{
[self tryToGetODR];
});
}
否则(除其他坏事外)您正在尝试访问 resourceRequest
并在后台线程上启动非条件访问。这意味着您不给第一个请求(条件请求)一个完成的机会。
我将按需资源添加到我的应用程序并发布到应用程序商店。 我的部分用户有问题,资源下载完成时调用的块 completionHandler 不会发生。 它不依赖于光盘 space。 在大多数情况下它都能正常工作。
一旦我遇到同样的问题,我重置我的iPhone内容,重新安装应用程序,问题就没有了。
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSSet *tags = [NSSet setWithObjects: self.exerciseId, nil];
resourceRequest = [[NSBundleResourceRequest alloc] initWithTags:tags];
[resourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:
^(BOOL resourcesAvailable)
{
if (resourcesAvailable) {
dispatch_async(dispatch_get_main_queue(), ^{
[self setupMoviePlayerVideoWithName:_exerciseId];
});
}
else {
[self tryToGetODR];
}
}];
}
-(void) tryToGetODR{
resourceRequest.loadingPriority = NSBundleResourceRequestLoadingPriorityUrgent;
[resourceRequest beginAccessingResourcesWithCompletionHandler: ^(NSError * __nullable error){
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
return;
}
[self.videoImageView setHidden:true];
[self.activityIndikator setHidden:true];
[self.downloadProgressLabel setHidden:true];
[self setupMoviePlayerVideoWithName:_exerciseId];
});
}];
}
有人遇到过类似情况吗?
问题的零星性质立即暗示线程问题。事实上,你有一个。变化:
else {
[self tryToGetODR];
}
至:
else {
dispatch_async(dispatch_get_main_queue(), ^{
[self tryToGetODR];
});
}
否则(除其他坏事外)您正在尝试访问 resourceRequest
并在后台线程上启动非条件访问。这意味着您不给第一个请求(条件请求)一个完成的机会。