MPMediaItemPropertyPersistentIDはどの程度ユニークですか?IDのリストを同じiTunesアカウントに接続されている別のデバイスに同期する場合でも機能しますか?
IDをリストとして保存するiCloud同期プレイリストソリューションを実装したいのですが、これが可能かどうかを知る必要があります。
MPMediaItemPropertyPersistentIDはどの程度ユニークですか?IDのリストを同じiTunesアカウントに接続されている別のデバイスに同期する場合でも機能しますか?
IDをリストとして保存するiCloud同期プレイリストソリューションを実装したいのですが、これが可能かどうかを知る必要があります。
ドキュメント によると(私の強調) ..。
MPMediaItemPropertyPersistentID識別子の値は、アプリケーションの起動中およびメディアアイテムの同期ステータスを変更しない同期間で保持されます。この値は、同期/非同期/同期サイクル全体で持続することは保証されていません。
このように、これに基づいて持続することすらできないことを考えると、それが十分に堅牢な方法でデバイス間で持続したとしても、私は驚きます。
私の理解では、これは不可能です。このIDは、デバイスごとにのみ永続的だと思います。iTunesStoreの特定の曲の一意の識別子ではありません。自分の同期した曲のIDにすぎません。
ドキュメントを読むと、このIDがいかに脆弱であるかがわかります。
「この値は、同期/非同期/同期サイクル全体で持続することは保証されていません。」
そのため、曲データベースをiTunesと同期し、iOSデバイスから曲を削除して再度同期し、デバイスに戻すと、この曲の同じIDを再度取得できない場合があります。そして確かに他のデバイス間ではありません。
したがって、iTunesカタログの各曲またはMac上の独自のiTunesカタログ(MacがIDを処理する必要がある)に対して世界的に同一の識別子を取得するまで、あなたがやろうとしていることは機能しないと思います。
他の答えは少し漠然としているので、ここに私自身の経験とテストからの答えがあります:
MPMediaItemPropertyPersistentID
1)デバイス間で等しいIDを取得するために使用することはできません。
2)MPMediaItemPropertyPersistentID
デバイスが別のiTunesライブラリと同期されるか、すべての音楽がデバイスから削除されてから再度同期されると、が変化します。
IDは、曲がデバイスで同期されるときにiTunesによって作成および保存されます。同期されていない場合、IDは削除されます。
私のように、Google検索を使用して他の誰かがここに着陸した場合:
iOSでデバイスをアップグレードした後、音楽アプリがアップグレード前のpersistentIDを使用しようとしたときに、middaparkaが上記で言ったことを確認しました。IDが変更され、私は(無意識のうちに)通常は聴かないライブラリの多くの曲を聴いてしまいました...
そこで、middaparkaのアドバイスを受けて、title、artistName、albumTitle、durationからハッシュを排他的にorすることでpersistentKeyを構築しました。コアデータベースの初期化中にpersistentKeyを構築すると、「通常の操作コード」でアイテムをフェッチするときに複数の文字列の比較を回避できるため、後で時間を節約できます。
永続キー戦略は、曲に対して適切に機能しました。しかし、title、artist、releaseYearのアルバムのハッシュを作成したところ、1回の衝突に終わりました。
1976年にリリースされた異なるアーティストによる2枚のセルフタイトルアルバムを持っていました。アルバムタイトルとアーティストのハッシュが独占的であるとき、彼らはお互いをキャンセルしました。アーティストの代わりにその期間ハッシュを使用することになり、それはうまくいきました。
後でpersistentKeysを生成するためのアルゴリズムを改良することになるかもしれません...