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):

  1. 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)
    }
    
    ...
    
  2. Erstelle ein SPPlaylist: [[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"].

  3. 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].

  4. Beobachte playlists Eigenschaft und verschieben Sie die erstellte Wiedergabeliste in meine SPPlaylistFolder (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 SPPlaylistWas ist damit zu tun, ohne dass es bereits erstellt wurde?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top