7

我实际上正在创建一个 iOS 应用程序,并希望将有关照片库图片的一些详细信息存储在 SQLite 数据库中。我还希望能够在用户拥有的不同设备上共享这些数据(想象有人想在他的 iPhone 上重新组织图片,并想在他的 iPad 中检索相同的订单)。

我搜索了 Apple 文档,但没有找到任何PHAsset跨设备共享的标识符。我还尝试检查共享位置的、PHImageFileURLKeyhashValue,但它们都不是。localIdentifierPHAsset

有人已经做过这样的事情了吗?

4

3 回答 3

5

目前没有。PHAsset 在第一个 iOS 8 Beta 中有一个共享标识符,但后来被删除。

于 2015-03-04T14:19:30.443 回答
2

从 iOS 15 开始,所有设备都可以使用一个标识符:https ://developer.apple.com/documentation/photokit/phcloudidentifier

API 非常简单。这个想法是你存储和同步云标识符,然后使用它们来检索本地标识符,然后你可以像你习惯的那样与现有的 API 一起使用。您可以批量请求云标识符,如下所示:

let localIdentifiers = <your-list-of-local-identifiers>
let mappings: [String: Result<PHCloudIdentifier, Error>] = 
  PHPhotoLibrary.shared().cloudIdentifierMappings(forLocalIdentifiers: localIdentifiers)

您可以使用该stringValue属性存储此类标识符。

反之亦然(假设您有一个cloudIdentifiers包含标识符字符串值的列表):

let localIdentifiers: [PHCloudIdentifier: Result<String, Error>]
   = PHPhotoLibrary
        .shared()
        .localIdentifierMappings(
          for: cloudIdentifiers.map(PHCloudIdentifier.init(stringValue:)))

会发生什么错误?

  • 未找到标识符:您传递的标识符无效或资产已被删除
  • 找到云标识符的多个本地标识符(根据 WWDC,如果“云状态不同步或库依赖图像内容来查找匹配项”,则会发生这种情况)有关此处错误处理的更多信息

我通过实验得出的其他见解:

  • 您似乎能够在没有互联网的情况下获得云标识符,即使您根本没有登录 iCloud 帐户,您的应用程序也会禁用 iCloud。
  • 尽管文档说明这是一项昂贵的操作,但一次加载数百个标识符的开销对我来说并不明显
于 2022-02-06T13:59:42.753 回答
-1

看起来,对于所有与 iTunes 同步的 PHAsset,localIdentifier 都是相同的,即使跨设备也是如此。意思是:如果你从一个设备导入图像并将它们同步到另一个设备,则 PHAsset 的 localIdentifier 是相同的。

于 2015-12-02T20:44:21.747 回答