Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用FetchAssets按添加日期的顺序获取相位集_Ios_Objective C_Iphone_Photokit - Fatal编程技术网

Ios 如何使用FetchAssets按添加日期的顺序获取相位集

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

我正在尝试从Camera roll、iCloud和Photostream中获取相位集,其顺序与用户添加的顺序相同。在ios 11中,我使用

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)
}