Wie einzigartig ist MPMediaItemPropertyPersistentID? Funktioniert es sogar, wenn die ID-Liste mit einem anderen Gerät synchronisiert wird, das mit demselben iTunes-Konto verbunden ist?
Ich möchte eine iCloud-synchronisierte Playlist-Lösung implementieren, die die IDs als Liste speichert und ich muss wissen, ob das möglich ist.
Wie in der Dokumentation ( Betonung meiner) ...
Der Wert der Kennung MPMediaItemPropertyPersistentID bleibt bestehen über Anwendungsstarts hinweg und über Synchronisierungen hinweg, die das nicht ändern Synchronisierungsstatus des Medienelements Der Wert ist nicht garantiert über einen Sync / unsync / sync-Zyklus hinweg bestehen.
Angesichts dessen, dass es auf dieser Grundlage nicht einmal bestehen bleibt, würde ich mich wundern, wenn es auf allen Geräten ausreichend robust bleiben würde, wenn überhaupt.
Nach meinem Verständnis ist das nicht möglich. Ich denke, dass diese ID nur für jedes Gerät persistent ist. Es ist kein eindeutiger Bezeichner für einen bestimmten Titel im iTunes Store. Es ist nur eine ID für Ihre eigenen synchronisierten Songs.
Wenn Sie die Dokumentation lesen, werden Sie sehen, wie fragil diese ID sein könnte.
"Es ist nicht garantiert, dass der Wert über einen Sync / unsync / sync-Zyklus bestehen bleibt."
Wenn Sie also Ihre Song-Datenbank mit iTunes synchronisieren und einen Song möglicherweise von Ihrem iOS-Gerät und der Synchronisierung löschen und wieder auf Ihr Gerät stellen, erhalten Sie unter Umständen nicht die gleiche ID für diesen Song. Und natürlich nicht über andere Geräte.
Ich denke also, was Sie versuchen, wird nicht funktionieren, bis Sie einen weltweit identischen Bezeichner für jeden Titel des iTunes-Katalogs oder Ihren eigenen iTunes-Katalog auf dem Mac erhalten (wo der Mac die IDs verarbeiten muss) .
Die anderen Antworten sind ein wenig groß vage, also hier ist eine Antwort aus meinen eigenen Erfahrungen und Tests:
1) Sie können MPMediaItemPropertyPersistentID
nicht verwenden, um eine ID zu erhalten, die zwischen Geräten gleich ist.
2) MPMediaItemPropertyPersistentID
wird geändert, wenn das Gerät mit einer anderen iTunes-Mediathek synchronisiert wird oder alle Musiktitel vom Gerät entfernt und dann erneut synchronisiert werden.
Die ID wird von iTunes erstellt und gespeichert, wenn der Song auf dem Gerät synchronisiert wird. Wenn es nicht synchronisiert ist, wird die ID gelöscht.
Falls jemand anders hier landet, wie ich, mit einer Google-Suche:
Ich habe nach einem iOS-Upgrade meines Geräts bestätigt, was middaparka oben gesagt hat, als meine Musik-App versuchte, persistente IDs vor dem Upgrade zu verwenden. Die IDs hatten sich geändert, und ich hörte (unwissentlich) viele Lieder aus meiner Bibliothek, die ich normalerweise nicht höre ...
Also habe ich middaparkas Ratschlag genommen und einen persistenten Schlüssel erstellt, indem ich die Hashes von title, artistName, albumTitle und duration exclusiv-oring. Das Erstellen des persistentKey während der Core-Datenbank-Initialisierung wird später Zeit sparen, indem mehrere Zeichenfolgenvergleiche beim Abrufen von Elementen in "normalem Betriebscode" vermieden werden.
Die persistentKey-Strategie funktionierte für Songs richtig. Wenn ich jedoch einen Hash für Alben von Titel, Künstler und ReleaseYear gemacht habe, endete ich mit einer Kollision.
Ich hatte zwei selbstbetitelte Alben von verschiedenen Künstlern, die 1976 veröffentlicht wurden. Als die Hashes für den Albumtitel und die Künstlerin exklusiv waren, löschten sie sich gegenseitig aus. Ich habe den Hash für die Dauer anstelle des Künstlers verwendet, und das hat funktioniert.
Ich könnte am Ende den Algorithmus für die Erstellung der persistentKeys später ... verfeinern ...
Tags und Links objective-c ios icloud itunes mpmediaitem