如何确定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是否被删除。