MPMediaItemPropertyPersistentID有多独特?

8

MPMediaItemPropertyPersistentID有多独特?将ID列表同步到连接到相同iTunes帐户的另一个设备上时,它是否有效?

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

4个回答

7
根据文档(我强调),MPMediaItemPropertyPersistentID标识符的价值在应用程序启动和不更改媒体项目的同步状态的同步之间持续存在。但该值不能保证在同步/取消同步/同步周期中持久存在。因此,考虑到它甚至不会在这个基础上持久存在,如果有的话,我会感到惊讶,如果它在设备之间以足够稳健的方式持久存在。

我错过了文档的这一部分。看起来我得另寻他法了... - miho
1
虽然有点笨重,但您可能需要通过每个MPMediaEntity可用的valueForProperty数据构建一些一致的东西。(即:MPMediaItemPropertyTitle、MPMediaItemPropertyAlbumTitle、MPMediaItemPropertyArtist等。) - John Parker

4
在我的理解中,这是不可能的。我认为这个ID只对每个设备有持久性,它不是iTunes Store中特定歌曲的唯一标识符,只是你自己同步歌曲的ID。
当你阅读文档时,你会发现这个ID是多么脆弱。
引用:
“该值不能保证在同步/取消同步/同步周期内持久。”
因此,如果您将歌曲数据库与iTunes同步,并从iOS设备中删除某个歌曲并再次同步并将其放回到您的设备中,您可能无法再次获得相同的ID。而且肯定不能应用于其他设备。
所以我认为,除非你获得iTunes目录中每首歌曲或Mac上自己的iTunes目录的全球唯一标识符(在这种情况下Mac必须处理这些ID),否则你所尝试的做法将行不通。

2

如果有其他人和我一样通过谷歌搜索到这里:

在我更新iOS设备后,我的音乐应用程序试图使用升级前的persistentIDs时,我确认了middaparka上面所说的。ID已经发生了改变,我无意中听了许多我平时不听的歌曲...

所以我采纳了middaparka的建议,并通过对标题、歌手名、专辑标题和持续时间的哈希值进行异或运算,构造了一个持久键(persistentKey)。在核心数据库初始化期间构建persistentKey将在后期节省时间,避免在“正常操作代码”中获取项目时进行多个字符串比较。

持久键策略对歌曲有效。但是,当我为专辑从标题、艺术家和发行年份生成哈希时,我遇到了一个冲突。

我有两张不同艺术家于1976年发布的同名专辑。当专辑标题和艺术家的哈希值进行异或运算时,它们互相抵消。最终我使用了持续时间而不是艺术家的哈希值,这样做可以解决问题。

我可能会稍后改进生成persistentKeys的算法...


2
其他答案有点模糊,以下是我个人经验和测试得出的答案:
1)您不能使用MPMediaItemPropertyPersistentID获取在不同设备间相等的ID。
2)当设备与另一个iTunes库同步或所有音乐从设备中删除后再次同步时,MPMediaItemPropertyPersistentID会发生变化。
该ID是由iTunes在设备上同步歌曲时创建和存储的。如果未同步,则ID将被删除。

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