1

我添加到我的应用按需资源并发布到应用商店。我的部分用户有问题,资源下载完成时调用的 block completionHandler 不会发生。它不依赖于磁盘空间。在大多数情况下,它工作正常。

一旦我遇到了同样的问题,我就重置了我的 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];

                    });
                }];
    }

有人遇到类似情况吗?

4

1 回答 1

0

问题的零星性质立即暗示线程问题。事实上,你有一个。改变:

else {
    [self tryToGetODR];
}

到:

else {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self tryToGetODR];
    });
}

否则(除其他不好的事情外)您正在尝试resourceRequest在后台线程上访问和启动非条件访问。这意味着您不会给第一个请求(条件请求)一个完成的机会。

于 2016-12-02T02:41:34.917 回答