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

我试图抓住在iOS 8中使用新的Photos框架拍摄的最后一张照片的缩略图。我现在要做的代码如下:

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]; } }]; 

代码设法抓取设备上最近拍摄的照片,但是如果设备上拍摄的最后一张照片被删除,则不考虑该事实,并且button的图像被设置为resultHandler已删除的照片。 这似乎是由于在iOS 8中,当您删除照片需要30天才从设备中删除照片时,由于某些原因,这些照片仍然包含在PHFetchResult

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

 <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 

assetsInfo的下一个对象的打印输出,我validation的照片没有被删除,如下所示:

 <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 

那里似乎没有任何信息可以告诉我照片是否被删除。 我认为hidden属性可能会有所帮助,但是与照片是否出现在Photos.app专辑/集合中有关。 我认为可能assetSource属性可能是有用的,但它似乎没有logging,并进一步调查也似乎并没有涉及到照片的删除状态。

有没有办法看到一个PHAsset对象是否代表一个被删除的照片? 有没有办法缩小我提取的资产,以排除“最近删除”相册中包含的照片?

 PHFetchResult *fetchResults = [PHAsset fetchAssetsWithOptions:options]; NSArray* tempArray = [fetchResults objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, fetchResults.count)]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"description contains %@",@"assetSource=3"]; NSArray *filteredArray = [tempArray filteredArrayUsingPredicate:predicate]; 

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

 [asset canPerformEditOperation:PHAssetEditOperationContent] [asset canPerformEditOperation:PHAssetEditOperationProperties] 

在PHAsset运行时标题中有一些有用的属性:

 @property (getter=isTrashed, nonatomic, readonly) bool trashed; @property (nonatomic, readonly) NSDate *trashedDate; 
 PHFetchResult * recentlyDeletedAlbum = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:1000000201 options:nil]; 

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