Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift MacOS PhotoKit-列出所有用户创建的智能相册?_Swift_Macos_Photokit_Phassetcollection - Fatal编程技术网

Swift MacOS PhotoKit-列出所有用户创建的智能相册?

Swift MacOS PhotoKit-列出所有用户创建的智能相册?,swift,macos,photokit,phassetcollection,Swift,Macos,Photokit,Phassetcollection,我第一次开始玩macOS开发。我正在尝试查询我在macOS照片应用程序中创建的智能相册列表。正如你在这个截图中看到的,我定义了18张智能专辑和1张普通专辑 但是,当我获取智能相册PHAssetCollections时,我没有看到我定义的智能相册。下面是我用来获取照片总数、智能相册和普通相册的代码: let allPhotosOptions = PHFetchOptions() allPhotosOptions.includeAssetSourceTypes = [.typeUserLibrar

我第一次开始玩macOS开发。我正在尝试查询我在macOS照片应用程序中创建的智能相册列表。正如你在这个截图中看到的,我定义了18张智能专辑和1张普通专辑

但是,当我获取智能相册
PHAssetCollection
s时,我没有看到我定义的智能相册。下面是我用来获取照片总数、智能相册和普通相册的代码:

let allPhotosOptions = PHFetchOptions()
allPhotosOptions.includeAssetSourceTypes = [.typeUserLibrary]

allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
let allPhotos = PHAsset.fetchAssets(with: allPhotosOptions)
let photoCount = allPhotos.count
print("photoCount=\(photoCount)")

print("***********************************")
print("Smart Albums")
print("***********************************")

let smartAlbumsOptions = PHFetchOptions()
smartAlbumsOptions.includeAssetSourceTypes = [.typeUserLibrary]
let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: smartAlbumsOptions)
let smartAlbumCount = smartAlbums.count
print("smartAlbumCount=\(smartAlbumCount)")
smartAlbums.enumerateObjects { (collection, index, stop) in
    print("Collection \(index + 1):")
    print("\tlocalizedTitle=\(String(describing: collection.localizedTitle))")
    print("\tassetCollectionType=\(collection.assetCollectionType)")
    print("\testimatedAssetCount=\(collection.estimatedAssetCount)")
    print("\tstartDate=\(String(describing: collection.startDate)), endDate=\(String(describing: collection.endDate))")
}

print("***********************************")
print("Albums")
print("***********************************")

let albums = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: nil)
let albumCount = albums.count
print("albumCount=\(albumCount)")
albums.enumerateObjects { (collection, index, stop) in
    print("Collection \(index + 1):")
    print("\tlocalizedTitle=\(String(describing: collection.localizedTitle))")
    print("\tassetCollectionType=\(collection.assetCollectionType)")
    print("\testimatedAssetCount=\(collection.estimatedAssetCount)")
    print("\tstartDate=\(String(describing: collection.startDate)), endDate=\(String(describing: collection.endDate))")
}
但是,当我运行此代码时,我看到以下输出,显示没有返回我的用户创建的智能相册:

2020-05-23 16:41:31.059604-0400 PhotoKitTest[40065:709882] Metal API Validation Enabled
2020-05-23 16:41:33.027378-0400 PhotoKitTest[40065:709882] [core] "Error returned from daemon: Error Domain=com.apple.accounts Code=7 "(null)""
photoCount=25369
***********************************
Smart Albums
***********************************
smartAlbumCount=15
Collection 1:
    localizedTitle=Optional("Bursts")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2017-03-13 14:50:57 +0000), endDate=Optional(2018-08-29 15:15:03 +0000)
Collection 2:
    localizedTitle=Optional("Slo-mo")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 3:
    localizedTitle=Optional("Screenshots")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2015-10-22 13:51:51 +0000), endDate=Optional(2020-05-21 14:39:40 +0000)
Collection 4:
    localizedTitle=Optional("Animated")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 5:
    localizedTitle=Optional("Live Photos")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 6:
    localizedTitle=Optional("Unable to Upload")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 7:
    localizedTitle=Optional("Panoramas")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2015-06-29 22:14:27 +0000), endDate=Optional(2015-07-26 19:28:39 +0000)
Collection 8:
    localizedTitle=Optional("Videos")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2004-11-11 01:03:36 +0000), endDate=Optional(2020-05-23 14:52:01 +0000)
Collection 9:
    localizedTitle=Optional("Hidden")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 10:
    localizedTitle=Optional("Selfies")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2011-08-06 13:17:49 +0000), endDate=Optional(2020-05-21 14:33:38 +0000)
Collection 11:
    localizedTitle=Optional("Favorites")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 12:
    localizedTitle=Optional("Time-lapse")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 13:
    localizedTitle=Optional("Portrait")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 14:
    localizedTitle=Optional("Long Exposure")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=nil, endDate=nil
Collection 15:
    localizedTitle=Optional("Recents")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=9223372036854775807
    startDate=Optional(2001-09-22 16:05:17 +0000), endDate=Optional(2020-05-23 14:52:01 +0000)
***********************************
Albums
***********************************
albumCount=1
Collection 1:
    localizedTitle=Optional("My Test Album")
    assetCollectionType=PHAssetCollectionType
    estimatedAssetCount=0
    startDate=nil, endDate=nil

正如你所看到的,我的普通相册我的测试相册被返回,但我创建的智能相册,如2008年、2009年等都没有。我做错什么了吗?我的
Info.plist
中是否需要包含
NSPhotoLibraryUsageDescription
以外的附加值?这是我第一次玩PhotoKit框架,所以我肯定我可能误解了什么。但是,我认为这是一个非常简单的用例。我正在macOS Catalina上运行这个,使用Xcode 11.5和Swift;博士,这是不可能的


  • 内置智能相册=自拍、全景、截图
  • 智能相册=在Mac上创建的自定义智能相册

苹果很久以前就推出了照片应用程序(iPhoto继任者)。如果你是一个需要智能相册、关键字等的高级用户,那么它是相当有限的。。。打开手机上的照片应用程序-没有智能相册。访问-没有智能相册。它们没有同步1

当您查看文档时,它会显示:

照片应用程序显示内置智能相册,对特定类型的相关资产进行分组

我不知道他们为什么在Photos.framework文档中谈论Photos应用程序,它不是非常清楚,但它给了你一个线索,
smartAlbum
是关于内置智能相册的

还有子类型文档:

此子类型适用于从macOS照片应用程序同步到iOS设备的智能相册

但是没有智能相册同步到iOS设备。如果您尝试使用此列表,它将是一个空列表

由于iCloud照片(IMHO),它受到了某种程度的限制。在另一个框架中有一个类比——CoreData+iCloud支持对您的功能施加了一些限制,它的功能不如CoreData(没有iCloud)那么强大。但这纯粹是猜测。如果你关闭iCloud照片(照片-首选项…-iCloud-iCloud照片),可能你所有的智能相册都会出现在列表中,但我没有那么勇敢尝试,因为我不想再次下载整个库或丢失一些东西

是否要访问smart相册?一些变通办法:

  • 打开相册,选择所有照片并创建常规相册->手动同步它们
  • ->半手动同步它们
  • 你可以搜索更多,大量的文章,问题


1实际上它们是同步的,但您只能在Mac上看到它们。

TL;博士,这是不可能的


  • 内置智能相册=自拍、全景、截图
  • 智能相册=在Mac上创建的自定义智能相册

苹果很久以前就推出了照片应用程序(iPhoto继任者)。如果你是一个需要智能相册、关键字等的高级用户,那么它是相当有限的。。。打开手机上的照片应用程序-没有智能相册。访问-没有智能相册。它们没有同步1

当您查看文档时,它会显示:

照片应用程序显示内置智能相册,对特定类型的相关资产进行分组

我不知道他们为什么在Photos.framework文档中谈论Photos应用程序,它不是非常清楚,但它给了你一个线索,
smartAlbum
是关于内置智能相册的

还有子类型文档:

此子类型适用于从macOS照片应用程序同步到iOS设备的智能相册

但是没有智能相册同步到iOS设备。如果您尝试使用此列表,它将是一个空列表

由于iCloud照片(IMHO),它受到了某种程度的限制。在另一个框架中有一个类比——CoreData+iCloud支持对您的功能施加了一些限制,它的功能不如CoreData(没有iCloud)那么强大。但这纯粹是猜测。如果你关闭iCloud照片(照片-首选项…-iCloud-iCloud照片),可能你所有的智能相册都会出现在列表中,但我没有那么勇敢尝试,因为我不想再次下载整个库或丢失一些东西

是否要访问smart相册?一些变通办法:

  • 打开相册,选择所有照片并创建常规相册->手动同步它们
  • ->半手动同步它们
  • 你可以搜索更多,大量的文章,问题


1实际上它们是同步的,但您只能在Mac上看到它们。

这是非常有用的信息!非常令人失望,但信息丰富。谢谢这是非常有益的!非常令人失望,但信息丰富。谢谢