文档说:
PHImageResultIsInCloudKey:一个布尔值,指示照片资产数据是存储在本地设备上还是必须从 iCloud 下载。(NSNumber) 如果是,则没有提供图像,因为资产数据必须从 iCloud 下载。要下载数据,请提交另一个请求,并为 networkAccessAllowed 选项指定 YES。
但是,当资产存储在 iCloud 照片库中时,此密钥始终为 YES,即使它已经完全下载到设备(在我的应用程序中下载它,也在照片应用程序中打开它)。
如果图像不可用,我想让用户有可能下载它(但不要自动下载,至少在没有 Wifi 时不会这样做)。
那么如何确定是否需要下载图像?
更奇怪的是:当我的结果块
requestImageForAsset:targetSize:contentMode:options:resultHandler:
被调用以获取需要下载的图像时,在交付了一个较小且降级的版本之后,我得到了最后一次调用,请求图像 == nil。
在这种情况下,降级是否,即使我没有图像并且图像仍然必须从 iCloud 下载,因为到目前为止只有照片应用程序中的一个小缩略图在本地可用。
我在具有不同 iOS 8 版本(8.1.x、8.2 beta、8.3 beta)的 iPhone 和 iPad 上对此进行了测试,行为始终相同。
在照片应用程序中打开图像后,结果处理程序的最后一次调用具有完整大小的图像,但 PHImageResultIsInCloudKey 仍然是 YES。
这是我如何请求图像的一些代码:
PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
options.networkAccessAllowed = NO;
[self.imageManager requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *requestedImage, NSDictionary *info) {
// Checking for requestedImage and the info keys here
// When a full sized image was loaded, the result of PHImageResultIsInCloudKey is still YES
// When a full sized image couldn't be loaded cause it's in the cloud, isDegraded is NO and PHImageResultIsInCloudKey is YES (as always) and requestedImage is nil
}];