ios 8,如何使用ALAssetLibrary获取所有照片以替换丢失的相机胶卷相册

时间:2014-09-10 17:45:28

标签: xcode5 ios8 camera-roll alassetlibrary

我的应用程序有一个自定义图像选择器,它使用ALAssetLibrary创建一个Album选择器和图像选择器。我们已经实施了一个自定义选择器,以便我们的客户选择多个图像。此图像选择器在iOS 7下运行良好,并显示包含所有用户照片的“相机胶卷”相册。但是,在iOS 8下运行相同的应用程序时,似乎Apple已从“相册”视图中删除了“相机胶卷”相册,并且仅显示“最近的照片”。从我所看到的,访问iOS 8中所有照片的唯一方法是通过Collection视图(在Photos应用程序或新的内置选择器中)。不幸的是,我现在不能使用Photokit因为我仍然需要支持我的iOS 6& 7位用户有没有人知道在iOS 8(在Xcode 5中编译)运行iOS 7应用程序时使用ALAssetLibrary获取所有资产并创建自定义相机胶卷相册的方法?

更新

好吧,正如我在上面的原帖中所述,我最初无法使用新的照片框架(PhotoKit)。但是,我们最近将构建版本移至Xcode 6,现在我可以使用照片框架创建一组所有照片(请参阅WWDC ExampleappusingPhotosframework示例代码以了解如何执行此操作)。

然而,就像每个人都说PhotoKit一样强大,它缺少一些关键的过滤功能。实际上,没有简单的方法可以使用带有PHFetchResult的谓词过滤掉原始“PhotoStream”中的照片。您只能使用公共场所。幸运的是,我想出了如何使用PHAsset描述过滤它们。如果照片位于用户的照片流中,则说明中列出的assetSource键等于2。因此,我在结果上使用了快速枚举,并使用asset.description属性上的简单stringInRange过滤器将所有资产移动到不在PhotoStream中的数组(查找“assetSource = 2”)。它可能不是最好的解决方案,但它现在有效,因此用户不会看到本地图书馆和他们的照片流中的照片重复。至少我可以呈现所有客户的照片,并允许我的多媒体选择器与使用ALAssetLibrary的原始类一样接近。

从各方面来说,如果有人使用谓词有更好的解决方案,请lmk。

2 个答案:

答案 0 :(得分:4)

我有同样的问题。无法找到适当的文档说资产库不再能访问这些照片,但Release Notes for iOS 8表示您可以使用PhotosFramework。但是Haven还没有测试过。

  

Photos框架(Photos.framework)提供了新的工作API   包含照片和视频资产,包括iCloud Photos资产   由照片应用管理。这个框架更有能力   替代资产库框架。

也许这意味着我们 在iOS 8+上使用它?

更新:无法访问所有照片是iOS 8.0上的一个错误,它已在8.0.2上修复。请参阅下面的其他答案。

答案 1 :(得分:0)

好吧,好像这只是一个bug,iOS 8.0.2修复了它(至少对我而言,因为我现在可以看到图像选择器中的所有照片)。

  

此版本包含改进和错误修复,包括:

     

[...]   修复了导致某些应用无法访问照片库中的照片的问题。 [...]