有时 PHAsset fetchAssetsWithLocalIdentifiers:options 方法返回一个空的提取结果

Posted

技术标签:

【中文标题】有时 PHAsset fetchAssetsWithLocalIdentifiers:options 方法返回一个空的提取结果【英文标题】:Sometimes PHAsset fetchAssetsWithLocalIdentifiers:options method return a empty fetch result 【发布时间】:2017-03-17 02:37:33 【问题描述】:

有人遇到过这个问题吗?任何建议将不胜感激。

代码如下: 有时 resultAsset 是空的。在ios9.3上可能偶尔会发生。

- (PHAsset*)retrievePHAssetFromLocalIdentifier:(NSString*)localIdentifier 
    if (!localIdentifier) 
        return nil;
    
    NSArray *localIdentifiers = @[localIdentifier];
    PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:localIdentifiers options:nil];
    PHAsset *resultAsset = [result firstObject]; //Sometimes the resultAsset is empty. Maybe happened on iOS9.3 occasionally.
    if (!resultAsset) 
        NSLog(@"can't retrieve PHAsset from localIdentifier:%@",localIdentifier);
    
    return resultAsset;

【问题讨论】:

【参考方案1】:

从“我的照片流”中选择照片时会出现此问题。最后,我得到了这个解决方法来解决它。希望对你有帮助。

-(PHAsset*)workAroundWhenAssetNotFound:(NSString*)localIdentifier

    __block PHAsset *result = nil;
    PHFetchOptions *userAlbumsOptions = [PHFetchOptions new];
    userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"];
    PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:userAlbumsOptions];

    if(!userAlbums || [userAlbums count] <= 0)             
        return nil;
    

    [userAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx1, BOOL *stop) 
        PHFetchOptions *fetchOptions = [PHFetchOptions new];
        fetchOptions.predicate = [NSPredicate predicateWithFormat:@"self.localIdentifier CONTAINS %@",localIdentifier];
        PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:fetchOptions];

        [assetsFetchResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop1) 
            if(asset)
                result = asset;
                *stop1 = YES;
                *stop = YES;
            
        ];
    ];
    return result;

参考链接:How to get photo from My Photo Stream Album

【讨论】:

效果很好!!谢谢 我的 userAlbums 将为零

以上是关于有时 PHAsset fetchAssetsWithLocalIdentifiers:options 方法返回一个空的提取结果的主要内容,如果未能解决你的问题,请参考以下文章

PHAsset,如何在应用重启后检索特定的 PHAsset 对象(ios8 Photos)

如何在 iOS 中通过 UIActivityViewController 导出 PHAsset 视频

如何从 PHAsset 获取图像 URL?是不是可以使用 PHAsset URL 将图像保存到文档目录?

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

如何从 PHAsset 获取视频的缩略图?

如何从视频 URL 获取视频的 PHAsset?