Das Verschieben der Playlist in einen Ordner funktioniert nicht
Frage
Ich habe Probleme beim Verschieben einer neu erstellten Datei SPPlaylist
zu einem (ggf. neu erstellten) SPPlaylistFolder
.
Die Idee besteht darin, im Spotify-Konto des Benutzers einen Ordner zu erstellen, in dem ich aus meiner Anwendung generierte Wiedergabelisten hinzufügen kann.Wenn kein solcher Ordner erstellt wurde, erstelle ich einen neuen SPPlaylistFolder
und speichern Sie die Ordner-ID zur späteren Verwendung.
Folgendes mache ich (ich habe Teile des Codes weggelassen, die für dieses Thema nicht interessant sind):
Wenn ein
folderId
wurde zuvor gespeichert (d. h.ein Ordner erstellt wurde), verwenden Sie diese ID, um die Ordnerinstanz zu laden:... NSError *error = nil; if (folderId > 0) { // try to fetch folder folder = [[SPSession sharedSession] playlistFolderForFolderId:folderId inContainer:container]; } if (folder == nil) { // create folder folder = [container createFolderWithName:@"My Folder" error:&error]; // save a reference to the folder in an instance var _appFolder = [folder retain]; // (also saving folder.folderId in NSUserDefaults) } ...
Erstelle ein
SPPlaylist
:[[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"]
.Verwenden Sie KVO, um die Container zu beobachten
playlists
Eigenschaft und werden benachrichtigt, wenn die Playlist erstellt wurde:[[[SPSession sharedSession] userPlaylists] addObserver:self forKeyPath:@"playlists" options:0 context:nil]
.Beobachte
playlists
Eigenschaft und verschieben Sie die erstellte Wiedergabeliste in meineSPPlaylistFolder
(containerPlaylist
ist die Playlist, die ich als diejenige identifiziert habe, die verschoben werden soll):... // identify the index of the containerPlaylist NSInteger playlistIndex = [[[[SPSession sharedSession] userPlaylists] playlists] indexOfObject:containerPlaylist]; // move playlist NSError * error = nil; BOOL success = [container movePlaylistOrFolderAtIndex:playlistIndex ofParent:nil toIndex:0 ofNewParent:_appFolder error:&error]; if (success) { // This should be a great success. But the playlist hasn't been moved, although the error variable is nil. } ...
Nach diesen Schritten wurden sowohl die Playlist als auch der Ordner erstellt, die Playlist wurde jedoch nicht verschoben.Und ich erhalte keine Fehlermeldungen, die auf eine ungültige Eingabe hinweisen movePlaylistOrFolderAtIndex
Methode.
Übersehe ich hier etwas Offensichtliches?Oder ist die Verschiebungsfunktion irgendwie fehlerhaft?
Notiz:Ich habe auch versucht, diesen Code zu verwenden, um zuvor erstellte Wiedergabelisten zu verschieben (z. B.alle Playlists mit dem Namen „Meine Playlist“ in den Ordner verschieben).
EDIT 1: Ich habe das etwas genauer untersucht und tatsächlich eine bewegende Aktion am Laufen gehalten.Allerdings musste ich einen Teil des Codes neu schreiben und die Verschiebung mehrmals (oder zu einem späteren Zeitpunkt) durchführen.Es scheint, dass dies damit zusammenhängt, dass die Daten in SPSession nicht vollständig synchronisiert/aktuell sind (?), da es möglich ist, Wiedergabelisten zu verschieben, wenn man sich später mit einer neuen Sitzung anmeldet.
Ist es möglich, dass es sich um ein Synchronisierungsproblem handelt, d. h.libspotify glaubt, dass die SPPlaylistFolder
entsteht und bewegt sich SPPlaylist
Was ist damit zu tun, ohne dass es bereits erstellt wurde?
Lösung
Nachdem ich meinen Code mit Bezug auf aktualisiert habe Dieses Problem auf Cocoalibspotify, es funktioniert besser.Was mir zunächst nicht klar war, war, wie die Synchronisierung mit dem Spotify-Dienst funktionierte.Es kann beispielsweise leicht mehrere Minuten dauern, bis die Änderungen im Spotify-Desktop-Client wirksam werden.