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

Posted

技术标签:

【中文标题】ios 8,如何使用 ALAssetLibrary 获取所有照片来替换丢失的相机胶卷相册【英文标题】:ios 8, how to get all photos using ALAssetLibrary to replace the missing camera roll album 【发布时间】:2014-09-10 17:45:27 【问题描述】:

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

更新

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

然而,正如大家所说的 PhotoKit 一样强大,它缺少一些关键的过滤功能。事实上,使用带有 PHFetchResult 的谓词来过滤掉原始“PhotoStream”中的照片并不容易。您只能使用公共属性。幸运的是,我想出了如何使用 PHAsset 描述过滤它们。如果照片在用户的照片流中,则描述中列出的assetSource 键等于2。因此,我对结果使用了快速枚举,并使用 assets.description 属性上的简单 stringInRange 过滤器将所有资产移动到不在 PhotoStream 中的数组中(寻找“assetSource=2”)。它可能不是最好的解决方案,但它现在可以工作,因此用户不会从本地图书馆和他们的照片流中看到他们照片的副本。至少我可以展示所有客户的照片,并让我的多媒体选择器的功能与使用 ALAssetLibrary 的原始类一样接近。

当然,如果有人使用谓词有更好的解决方案,请 lmk。

【问题讨论】:

没关系,我看错了你的问题。抱歉打扰了。 我不久前在这里写过... AssetSource 有问题,所以要小心。它似乎已在 8.0.2 上进行了修补。 ***.com/questions/25730830/… 【参考方案1】:

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

照片框架 (Photos.framework) 提供了新的 API 用于工作 照片和视频资产,包括 iCloud 照片资产, 由照片应用程序管理。这个框架功能更强大 资产库框架的替代方案。

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

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

【讨论】:

感谢 Apple 让我们的生活复杂化 @RossBarbish:看看我的另一个答案,原来这只是一个错误,并在 8.0.2 中修复【参考方案2】:

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

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

[...] 修复了阻止某些应用访问照片库中的照片的问题。 [...]

【讨论】:

是的。昨晚证实了同样的事情。至少我现在学会了如何使用 PhotoKit。 @stulevine:您介意将其标记为已接受,因此人们知道 Photos.framework 不一定是解决方案吗?谢谢。 这个问题在安装了 iOS 8.3 的 iPhone 5s 上仍然出现,无论什么具体原因。

以上是关于ios 8,如何使用 ALAssetLibrary 获取所有照片来替换丢失的相机胶卷相册的主要内容,如果未能解决你的问题,请参考以下文章

ALAssetLibrary ,它仅在某些设备上的所有照片中显示部分照片

iphone iOS 内存导航控制器和 ALAssetlibrary 的警告句柄

我如何评论 ALAssetLibrary 代表

iOS PhotoKit框架 详解

如何检测 ALAssetLibrary 中的最后一项是照片还是视频?

使用 ALAssetLibrary 保存到相册时失败