MPMediaItemPropertyPersistentID有多独特?将ID列表同步到连接到同一iTunes帐户的其他设备时,它是否会起作用?
我想实现一个iCloud同步播放列表解决方案,该解决方案将ID存储为列表,我需要知道这是否可行。
答案 0 :(得分:7)
根据documentation (强调我的) ...
MPMediaItemPropertyPersistentID标识符的值仍然存在 跨应用程序启动和跨更改不会更改的同步 同步媒体项的状态。 无法保证该值 在同步/非同步/同步周期中保持不变。
因此,鉴于它甚至不会在此基础上持续存在,如果它以足够强大的方式持续存在于设备中,我会感到惊讶,如果有的话。
答案 1 :(得分:4)
据我了解,这是不可能的。我认为这个ID仅适用于每个设备。它不是iTunes Store中特定歌曲的唯一标识符。它只是您自己同步歌曲的ID。
当您阅读文档时,您会看到此ID有多么脆弱。
“无法保证该值在同步/非同步/同步周期中保持不变。”
因此,如果您将歌曲数据库与iTunes同步,并且可能会从iOS设备中删除歌曲并再次同步并将其重新发送回设备,则此歌曲可能无法再获得相同的ID。并且肯定不会跨越其他设备。
所以我认为,你想要做的事情将无法奏效,直到你获得iTunes目录的每首歌曲或Mac上你自己的iTunes目录(Mac必须处理ID)的全球相同的标识符。
答案 2 :(得分:2)
其他答案有点模糊,所以这是我自己的经验和测试的答案:
1)您无法使用MPMediaItemPropertyPersistentID
获取设备之间相同的ID
2)当设备与另一个iTunes资料库同步或所有音乐从设备中删除然后再次同步时,MPMediaItemPropertyPersistentID
将发生变化。
当歌曲在设备上同步时,iTunes会创建并存储ID。如果它没有被删除,则ID被删除。
答案 3 :(得分:1)
如果有其他人像我一样在这里使用谷歌搜索:
我确认了middaparka在我的设备升级iOS之后所说的内容,当我的音乐应用程序试图在升级之前使用persistentIDs时。身份证发生了变化,我最终(不知不觉中)听了我图书馆里的许多歌曲,而这些歌曲我通常听不到......
所以我接受了middaparka的建议,并通过对title,artistName,albumTitle和duration的散列进行独占来构造一个persistentKey。在核心数据库初始化期间构建persistentKey将节省时间,避免在正常操作代码中获取项目时进行多次字符串比较。"
persistentKey策略适用于歌曲。然而,当我为title,artist和releaseYear的专辑制作哈希时,我最终发生了一次碰撞。
我在1976年发行了两张不同艺术家的同名专辑。当专辑封面和艺术家的专辑被排除在外时,他们互相取消了。我最终使用了哈希值而不是艺术家,这很有效。
我可能最终会改进算法以便稍后生成persistentKeys ......