8

MPMediaItemPropertyPersistentID 有多独特?将 ID 列表同步到连接到同一 iTunes 帐户的另一台设备时,它甚至可以工作吗?

我想实现一个 iCloud 同步播放列表解决方案,它将 ID 存储为一个列表,我需要知道这是否可行。

4

4 回答 4

7

根据文档 (强调我的) ...

MPMediaItemPropertyPersistentID 标识符的值在应用程序启动和不更改媒体项同步状态的同步之间保持不变。不保证该值在同步/非同步/同步周期内保持不变。

因此,鉴于它甚至不会在此基础上持续存在,如果它以足够强大的方式在设备上持续存在,我会感到惊讶,如果有的话。

于 2012-09-02T15:28:28.727 回答
4

据我了解,这是不可能的。我认为这个 ID 只对每个设备都是持久的。它不是 iTunes Store 中特定歌曲的唯一标识符。它只是您自己同步歌曲的 ID。

当您阅读文档时,您会看到这个 ID 是多么脆弱。

“不保证该值在同步/不同步/同步周期中持续存在。”

因此,如果您将歌曲数据库与 iTunes 同步,并可能从您的 iOS 设备中删除一首歌曲,然后再次同步并将其放回您的设备,您可能无法再次获得该歌曲的相同 ID。并且肯定不会跨其他设备。

因此,我认为,除非您为 iTunes 目录中的每首歌曲或您自己的 Mac 上的 iTunes 目录(Mac 必须处理 ID)获得全球相同的标识符,否则您尝试做的事情不会奏效。

于 2012-09-02T15:32:19.487 回答
2

其他答案有点模糊,所以这里是我自己的经验和测试的答案:

1)您不能MPMediaItemPropertyPersistentID用来获取设备之间相等的 ID。
2)MPMediaItemPropertyPersistentID当设备与另一个 iTunes 库同步或从设备中删除所有音乐然后再次同步时,将会发生变化。

当歌曲在设备上同步时,iTunes 会创建并存储 ID。如果未同步,则删除 ID。

于 2012-09-02T15:37:08.237 回答
2

如果有人像我一样登陆这里,使用谷歌搜索:

在我的设备升级 iOS 后,我确认了 middaparka 上面所说的内容,当时我的音乐应用程序尝试使用升级前的 persistentID。ID已经改变,我最终(不知不觉地)从我的图书馆听了很多我通常不听的歌曲......

所以我接受了 middaparka 的建议,并通过对 title、artistName、albumTitle 和 duration 的哈希进行异或运算来构造一个 persistentKey。在核心数据库初始化期间构建 persistentKey 将在以后节省时间,因为在获取“正常操作代码”中的项目时避免了多个字符串比较。

persistentKey 策略对歌曲有效。但是,当我从标题、艺术家和发行年份对专辑进行哈希处理时,我最终遇到了一次冲突。

1976 年,我有两张由不同艺术家发行的同名专辑。当专辑名称和艺术家的哈希值异或时,它们相互抵消了。我最终在持续时间内使用哈希而不是艺术家,这很有效。

我可能最终会改进生成persistentKeys的算法......

于 2015-07-29T10:52:16.043 回答