Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c MPMediaItemPropertyPersistentID有多独特?_Objective C_Ios_Itunes_Icloud_Mpmediaitem - Fatal编程技术网

Objective c MPMediaItemPropertyPersistentID有多独特?

Objective c MPMediaItemPropertyPersistentID有多独特?,objective-c,ios,itunes,icloud,mpmediaitem,Objective C,Ios,Itunes,Icloud,Mpmediaitem,MPMediaItemPropertyPersistentID有多独特?当将ID列表同步到连接到同一iTunes帐户的另一台设备时,它还能工作吗 我想实现一个iCloud同步播放列表解决方案,将ID存储为列表,我需要知道这是否可行。根据(我的重点) MPMediaItemPropertyPersistentID标识符的值仍然存在 跨应用程序启动和跨不更改 媒体项目的同步状态该值不能保证 在同步/不同步/同步周期内保持。 因此,考虑到它甚至不会在此基础上持续存在,如果它以一种足够健壮的方式在设备间

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

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

根据(我的重点)

MPMediaItemPropertyPersistentID标识符的值仍然存在 跨应用程序启动和跨不更改 媒体项目的同步状态该值不能保证 在同步/不同步/同步周期内保持。


因此,考虑到它甚至不会在此基础上持续存在,如果它以一种足够健壮的方式在设备间持续存在(如果有的话),我会感到惊讶。

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

当您阅读文档时,您将看到此ID可能是多么脆弱

“该值不保证在同步/不同步/同步周期内保持不变。”

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


所以我认为,除非你在Mac上为iTunes目录中的每首歌曲或你自己的iTunes目录(Mac必须处理ID)获得一个全球范围内相同的标识符,否则你所尝试的方法是行不通的

其他答案有点模糊,因此以下是我自己的经验和测试得出的答案:

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


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

以防其他人(如我)使用谷歌搜索登陆:

我证实了middaparka在我的设备进行iOS升级后所说的话,当时我的音乐应用程序试图使用升级前的PersistentID。ID改变了,我(无意中)从我的图书馆里听了很多平时不常听的歌曲

因此,我采纳了middaparka的建议,通过对标题、艺人姓名、专辑标题和持续时间的散列进行排他oring,构建了一个persistentKey。在核心数据库初始化期间构建persistentKey将节省以后的时间,因为在“正常操作代码”中获取项目时避免了多个字符串比较

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

1976年,我发行了两张不同艺术家的同名专辑。当专辑标题和艺术家的哈希值被排他性OR时,他们相互抵消。最后我用散列代替了艺术家,这就成功了


我可能会在以后改进生成persistentKeys的算法…

我错过了文档的这一部分。看起来我必须寻找另一种方法…虽然有点笨拙,但您可能必须通过每个MPMediaEntity可用的valueForProperty数据构建一致的内容。(即:MPMediaItemPropertyTitle、MPMediaItemPropertyAllBumTitle、MPMediaItemPropertyAttribute等)