MPMediaItemPropertyPersistentID的唯一性如何?当将ID列表同步到连接到同一iTunes帐户的另一台设备时,它还会工作吗?
我想实现一个iCloud同步播放列表解决方案,将ID存储为列表,我需要知道这是否可行。
根据文档(emphasis mine)。。。
MPMediaItemPropertyPersistentID标识符的值仍然存在跨应用程序启动和不更改媒体项目的同步状态该值不能保证在同步/非同步/同步周期内保持
因此,考虑到它甚至不会在此基础上持续存在,如果它以足够强大的方式在设备上持续存在(如果有的话),我会感到惊讶。
据我所知,这是不可能的。我认为这个ID只对每个设备是持久的。它不是iTunes商店中特定歌曲的唯一标识符。它只是您自己同步歌曲的ID。
当你阅读文档时,你会发现这个ID有多脆弱
"不能保证该值在同步/非同步/同步周期内保持不变。"
因此,如果你将歌曲数据库与iTunes同步,并可能从iOS设备中删除一首歌曲,然后再次同步并将其放回你的设备,你可能不会再次获得这首歌曲的相同ID。当然,其他设备也不例外。
所以我认为,除非你在Mac上为iTunes目录或你自己的iTunes目录(Mac必须处理ID)的每首歌曲获得一个全球相同的标识符,否则你试图做的事情是行不通的。
其他答案有点模糊,所以这里有一个来自我自己的经验和测试的答案:
1) 不能使用MPMediaItemPropertyPersistentID
获取设备之间相等的ID
2) 当设备与另一个iTunes库同步或从设备中删除所有音乐然后再次同步时,MPMediaItemPropertyPersistentID
将发生更改。
当歌曲在设备上同步时,ID get由iTunes创建并存储。如果未同步,则ID get将被删除。
如果其他人像我一样使用谷歌搜索降落在这里:
我确认了middaparka在我的设备iOS升级后所说的话,当时我的音乐应用程序试图使用升级前的persistentID。ID发生了变化,我(无意中)从我的图书馆里听了很多我通常不听的歌…
因此,我采纳了middaparka的建议,通过独占title、artistName、albumTitle和duration的散列,构建了一个persistentKey。在核心数据库初始化期间构建persistentKey将在以后节省时间,因为在"正常操作代码"中提取项目时避免了多个字符串比较
persistentKey策略适用于歌曲。然而,当我把标题、艺术家和发行年份的专辑搞得一团糟时,我最终遇到了一次冲突。
我在1976年发行了两张不同艺术家的同名专辑。当专辑标题和艺术家的话题被独家讨论时,他们互相取消了。我最终在持续时间内使用哈希而不是艺术家,这很有效。
我可能会在稍后完善生成持久密钥的算法。。。