Ios 如何使用FetchAssets按添加日期的顺序获取相位集
我正在尝试从Camera roll、iCloud和Photostream中获取相位集,其顺序与用户添加的顺序相同。在ios 11中,我使用Ios 如何使用FetchAssets按添加日期的顺序获取相位集,ios,objective-c,iphone,photokit,Ios,Objective C,Iphone,Photokit,我正在尝试从Camera roll、iCloud和Photostream中获取相位集,其顺序与用户添加的顺序相同。在ios 11中,我使用 PHFetchOptions *options = [[PHFetchOptions alloc] init]; PHFetchResult *fetchResults = [PHAsset fetchAssetsWithOptions:options]; 但这在iOS 12中已经停止工作。使用此iCloud图像和相机滚动图像是分开的。creationDa
PHFetchOptions *options = [[PHFetchOptions alloc] init];
PHFetchResult *fetchResults = [PHAsset fetchAssetsWithOptions:options];
但这在iOS 12中已经停止工作。使用此iCloud图像和相机滚动图像是分开的。creationDate和modifiedDate只提供了两个排序描述符
我尝试的第二个解决方案是使用智能相册从“用户库”中获取照片根据用户是否打开了iCloud库,“用户库”的工作方式不同。如果iCloud library处于启用状态,则用户库包含来自camera roll和iCloud library的所有图像。如果iCloud库已关闭,则用户库仅包含来自摄影机卷的图像。这将以正确的顺序返回来自摄影机卷和iCloud库的图像。问题是它无法从Photostream中获取图像
在另一种解决方案中,如果iCloud library打开,则从用户库中获取照片;如果iCloud关闭,则使用旧方法获取照片,为我们提供正确的photostream和相机滚动图像顺序
此解决方案也不起作用。
请检查以下场景:
- iCloud库已关闭,Photostream已打开。我们将使用带有默认选项的fetchAssetsWithOption。顺序是正确的
- 用户打开iCloud。Photostream会自动关闭。我们将从“用户库”中获取照片。给我们所有的图像从iCloud以及相机辊排序与默认选项。顺序是正确的
- 现在用户关闭iCloud库。iCloud中的所有图像都应从设备中删除。但是,一些来自iCloud的图像被留在了相机卷中。它们没有被删除(可能是由于iCloud中的错误)。因此,这些未删除的图像始终显示在顶部。如果用户从iCloud下载图像,并且在iCloud关闭时未删除图像,也会发生这种情况
所以有什么办法可以做到这一点。iOS 13的答案正在更新,其中使用“smartAlbumRecentlyAdded”比使用“smartAlbumUserLibrary”效果更好,因为行为发生了变化:向苹果发送了关于iOS 13行为变化的反馈。希望能有更好的解决办法 因为,尽管smartAlbumRecentlyAdded会在添加日期之前返回项目,但您不会得到所有项目,只是最近的项目
var fetchResult:PHFetchResult<PHAssetCollection>
if #available(iOS 13.0, *) {
fetchResult = PHAssetCollection.fetchAssetCollections(with:.smartAlbum,subtype:.smartAlbumRecentlyAdded,options: nil)
}
else {
fetchResult = PHAssetCollection.fetchAssetCollections(with:.smartAlbum,subtype:.smartAlbumUserLibrary,options: nil)
}
if let assetCollection = fetchResult.firstObject {
self.allPhotos = PHAsset.fetchAssets(in: assetCollection, options: nil)
}
var fetchResult:PHFetchResult
如果可用(iOS 13.0,*){
fetchResult=PHAssetCollection.fetchAssetCollections(具有:.smartAlbum,子类型:.smartAlbumRecentlyAdded,选项:nil)
}
否则{
fetchResult=PHAssetCollection.fetchAssetCollections(带:.smartAlbum,子类型:.smartAlbumUserLibrary,选项:nil)
}
如果让assetCollection=fetchResult.firstObject{
self.allPhotos=PHAsset.fetchAssets(in:assetCollection,options:nil)
}