iOS16系统根据PHAsset判断是否在云上

iOS16系统根据PHAsset判断是否在云上

-(BOOL)getIsInICloudWithAsset:(PHAsset *)asset
{
    if(asset && [asset isKindOfClass:PHAsset.class])
    {
        // asset是一个您想要为其获取信息的PHAsset对象
         NSArray *resourceArray = [PHAssetResource assetResourcesForAsset:asset];
          
         if (resourceArray.count >= 1){
             ///本地是否可用:NO 代表icould 图片
             // If this returns NO, then the asset is in iCloud and not saved locally yet
              return ![[resourceArray.firstObject valueForKey:@"locallyAvailable"] boolValue];
         }
         NSLog(@"asset 资源信息 resourceArray = %@", resourceArray);
          
         if ([[resourceArray.firstObject valueForKey:@"locallyAvailable"] boolValue] == NO){
             NSLog(@"图片 不在本地 isLocallayAvailable == NO");
         }else{
             NSLog(@"图片 在本地 isLocallayAvailable == YES");
         }
         return NO;
    }
    return NO;
}

注意:iOS16下面的方法获取到的都是NO,并列相信的网上的方法,要看具体系统的。

-(BOOL)getIsInICloudWithAsset:(PHAsset *)asset
{
    __block BOOL isICloudAsset = NO;
    if(asset && [asset isKindOfClass:PHAsset.class])
    {
        PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
        options.resizeMode = PHImageRequestOptionsResizeModeFast;
        options.synchronous = true;
        [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(80, 80) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *result, NSDictionary *info) {
            if ([[info objectForKey: PHImageResultIsInCloudKey] boolValue]) {
                isICloudAsset = YES;
            }}];
        
    }
    return isICloudAsset;
}

原因是:info根本没有对应的键值PHImageResultIsInCloudKey,所以获取到的都是NO。

你可能感兴趣的:(实用小技术,ios,ios)