Ios 如何确定PHFetchResult中的PHAsset是否表示已删除的照片?

Ios 如何确定PHFetchResult中的PHAsset是否表示已删除的照片?,ios,photokit,phasset,Ios,Photokit,Phasset,我正在尝试使用iOS 8中的新照片框架抓取上次在设备上拍摄的照片的缩略图。我现在要做的代码如下: PHFetchOptions *fetchOptions = [PHFetchOptions new]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; PHFetchResult *assetsInfo = [PHAsset fetchA

我正在尝试使用iOS 8中的新照片框架抓取上次在设备上拍摄的照片的缩略图。我现在要做的代码如下:

PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *assetsInfo = [PHAsset fetchAssetsWithOptions:fetchOptions];

PHImageRequestOptions *requestOptions = [PHImageRequestOptions new];
requestOptions.version = PHImageRequestOptionsVersionCurrent;
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
[[PHImageManager defaultManager] requestImageForAsset:[assetsInfo objectAtIndex:1]
                                           targetSize:CGSizeMake(100, 100)
                                          contentMode:PHImageContentModeAspectFill
                                              options:requestOptions
                                        resultHandler:^(UIImage *result, NSDictionary *info) {
                                            if (result) {
                                                // galleryButton is just a UIButton in the view
                                                [galleryButton setImage:result forState:UIControlStateNormal];
                                            }
                                        }];
代码会设法抓取设备上最近拍摄的照片,但如果设备上最后拍摄的照片被删除,则不会考虑这一事实,并且按钮的图像会设置为
resultHandler
中已删除的照片。这似乎是因为在iOS 8中,删除照片需要30天才能从设备中实际删除,并且由于某些原因,这些照片仍然包含在
PHFetchResult
s中

我试图在
AssetInfo
中包含的
PHAsset
对象上查找“deleted”或类似属性,但找不到任何类型的信息。调试器中已删除照片的打印输出如下所示:

<PHAsset: 0x57462a0> 7689FC1C-9EE2-4FF7-9B37-4A032A3FDA01/L0/001 mediaType=1/0, assetSource=2, (1536x2048), creationDate=2014-09-22 06:45:10 +0000, location=1, hidden=0, favorite=0
<PHAsset: 0x57461a0> E48D1482-395B-405C-85F9-FFD04D9EBFBD/L0/001 mediaType=1/0, assetSource=3, (2448x3264), creationDate=2014-09-21 04:24:55 +0000, location=0, hidden=0, favorite=0
那里似乎没有任何信息可以告诉我照片是否被删除。我认为
隐藏属性可能会有所帮助,但这与照片是否显示在特定的Photos.app相册/收藏中有关。我认为,
assetSource
属性可能有用,但它似乎没有被记录下来,而且经过进一步调查,似乎也与照片的删除状态无关

是否有办法查看
PHAsset
对象是否表示已删除的照片?有没有办法缩小我获取的资产范围,以排除“最近删除”相册中包含的照片

filteredArray不包括“最近删除的”相册,并且没有外观相同的照片。同样,对于AssetInfo中已删除的照片资产,以下两个将返回NO

[asset canPerformEditOperation:PHAssetEditOperationContent] 
[asset canPerformEditOperation:PHAssetEditOperationProperties]
其中有一些有用的特性:

@property (getter=isTrashed, nonatomic, readonly) bool trashed;
@property (nonatomic, readonly) NSDate *trashedDate;

这将返回所有最近删除的资产的集合。您可以迭代并获取此集合中所有对象的PHAsset,以检查您的PHAsset是否已删除。

没有属性指示PHAsset是否已删除
它对我有效的唯一方法是再次检查PhaseSetLocalid


如果PHAsset.fetchAssets(with localidentifiers:[PHAsset.localIdentifier],options:.none).count==0{}

我可能不会在生产中使用它,但对于聪明的人来说+1。这似乎是苹果方面的一个重大遗漏
@property (getter=isTrashed, nonatomic, readonly) bool trashed;
@property (nonatomic, readonly) NSDate *trashedDate;
PHFetchResult * recentlyDeletedAlbum = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:1000000201 options:nil];