1

通过 NSBundleResourceRequest (按需资源)下载资产目录后,我无法访问资产目录中的图像。

我的代码,假设图像集名称为“snow_4”,按需资源标签为“tag1”

NSBundleResourceRequest* resourceRequest = [[NSBundleResourceRequest alloc] initWithTags:[NSSet setWithObjects:@"tag1", nil]];

[resourceRequest conditionallyBeginAccessingResourcesWithCompletionHandler:
 ^(BOOL resourcesAvailable){
     // if resource is not available download it
     if (!resourcesAvailable) {
         [resourceRequest beginAccessingResourcesWithCompletionHandler:
          ^(NSError * __nullable error){
              if(!error){                      
                  UIImage* image = [UIImage imageNamed:@"snow_4"]; // image is null
              }
          }];
     }else{             
         UIImage* image = [UIImage imageNamed:@"snow_4"]; // image is null
     }
 }];

以下是我的磁盘报告,请注意 [UIImage imageNamed:@"snow_3"](标记为“使用中”)返回正确的对象,但不返回标记为“已下载”的图像

磁盘报告

感谢您的时间和帮助!

谢谢,火星

4

3 回答 3

1

确保NSBundleResourceRequest不提前发布。尝试让NSBundleResourceRequest变量全局,并访问图像UIImage(named: "xxx", in: self.bundleReq.bundle, compatibleWith: nil)

于 2020-03-31T10:48:51.563 回答
0

做这个

image = [UIImage imageNamaed:@"snow_4" inBundle:[resourceRequest bundle]];

于 2017-08-31T20:03:45.837 回答
0
let tags = NSSet(array: ["tag1","tag2"])
let resourceRequest = NSBundleResourceRequest(tags: tags as! Set<String>)
resourceRequest.conditionallyBeginAccessingResourcesWithCompletionHandler {(resourcesAvailable: Bool) -> Void in
    if resourcesAvailable {
        // Do something with the resources
    } else {
        resourceRequest.beginAccessingResourcesWithCompletionHandler {(err: NSError?) -> Void in
            if let error = err {
                print("Error: \(error)")
            } else {
                // Do something with the resources
            }
        }
    }
}
于 2017-12-29T06:06:29.053 回答