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

13
我有一个应用程序,其中包含自定义图像选择器,使用ALAssetLibrary创建相册选择器和图像选择器。我们实现了自定义选择器,以便我们的客户可以选择多个图像。这个图片选择器在iOS 7下表现很好,显示带有所有用户照片的“相机胶卷”相册。但是,在iOS 8下运行相同的应用程序时,苹果似乎从相册视图中删除了“相机胶卷”相册,只显示“最近的照片”。据我所见,在iOS 8中访问所有照片的唯一方法是通过Collection视图(在照片应用程序或新内置选择器中)。不幸的是,我现在不能使用Photokit,因为我仍然需要支持我的iOS 6& 7用户。是否有人知道在运行编译在Xcode 5中的iOS 7应用程序时,如何获取所有资源并使用ALAssetLibrary创建自定义相机胶卷相册的方法?

更新

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

然而,尽管所有人都说PhotoKit很强大,但它缺少一些关键的过滤功能。实际上,使用PHFetchResult的谓词无法轻松地过滤原始"PhotoStream"中的照片。您只能使用公共属性。幸运的是,我通过使用PHAsset描述找出了如何进行过滤。在描述中列出的assetSource键等于2,如果照片在用户的照片流中,则可以过滤掉它们。因此,我对结果进行快速枚举,并将所有不在PhotoStream中的资产移动到一个数组中,使用asset.description属性上的简单stringInRange过滤器(查找“assetSource = 2”)。这可能不是最佳解决方案,但它目前可用,这样用户就不会看到来自本地库和照片流的重复照片。至少我可以呈现所有客户的照片,并使我的多媒体选择器尽可能接近使用ALAssetLibrary的原始类。

如果有更好的解决方案,请告诉我。


没事,我看错了你的问题。对于造成的困扰,我很抱歉。 - lekksi
我之前在这里写过关于这个的内容... AssetSource存在问题,所以要小心。看起来它已经在8.0.2上得到了修补。https://dev59.com/PF8e5IYBdhLWcg3wdqKT - William Falcon
2个回答

4
我遇到了同样的问题。没有找到适当的文档说明Assets Library不再有访问那些照片的权限,但iOS 8发布说明说可以使用PhotosFramework。虽然还没有测试过。
Photos Framework(Photos.framework)提供了新的API,用于处理由Photos应用程序管理的照片和视频资源,包括iCloud照片资源。该框架是Assets Library框架的一个更强大的替代品。
也许这意味着我们必须在iOS 8+上使用它?
更新:无法访问所有照片是iOS 8.0上的一个错误,已在8.0.2中修复。请参见下面的我的其他答案。

6
谢谢你让我们的生活更加复杂,苹果。 - Ross Barbish
@RossBarbish:看看我的另一个答案,原来只是一个bug,在8.0.2中已经修复。 - Anas

0

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

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

[...] 修复了一个问题,防止某些应用程序从照片库访问照片。 [...]


1
是的。昨晚也确认了同样的事情。至少我现在学会了如何使用PhotoKit。 - stulevine
2
@stulevine:您介意将此标记为已接受,以便人们知道Photos.framework不一定是解决方案吗?谢谢。 - Anas
这个问题仍然出现在安装了iOS 8.3的iPhone 5s上,有没有具体的原因。 - AsifHabib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接