Question

J'ai des problèmes de déplacement d'une nouvelle création SPPlaylist à un (peut-être nouvellement créé) SPPlaylistFolder.

L'idée est de créer un dossier dans le compte Spotify de l'utilisateur, où je peux ajouter des listes de lecture générées à partir de mon application. Si aucun dossier de ce type n'a été créé, je crée un nouveau SPPlaylistFolder et enregistrez l'ID de dossier pour une utilisation ultérieure.

C'est ce que je fais (j'ai omis des parties du code qui ne sont pas intéressantes pour ce sujet):

  1. Si un folderId a déjà été enregistré (c'est-à-dire un dossier créé), utilisez cet ID pour charger l'instance de dossier:

    ...
    
    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. Créé un SPPlaylist: [[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"].

  3. Utilisez KVO pour observer le conteneur playlists propriété et être averti lorsque la playlist a été créée: [[[SPSession sharedSession] userPlaylists] addObserver:self forKeyPath:@"playlists" options:0 context:nil].

  4. Observer le playlists propriété et déplacer la playlist créée vers mon SPPlaylistFolder (containerPlaylist est la playlist que j'ai identifiée comme celle à déplacer): est-ce que

    ...
    // 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.
    }
    
    ...
    

Après ces étapes, la playlist et le dossier ont été créés, mais la playlist n'a pas été déplacée. Et je n'obtiens aucune erreur indiquant une entrée non valide dans le movePlaylistOrFolderAtIndex méthode.

Est-ce que je manque quelque chose d'évident ici? Ou la fonctionnalité de déplacement est-elle imparfaite d'une manière ou d'une autre?

Remarque: J'ai également essayé d'utiliser ce code pour déplacer des listes de lecture qui ont été créées précédemment (c'est-à-dire déplacer toutes les listes de lecture nommées "My Playlist" dans le dossier).

Modifier 1: J'ai enquêté un peu plus loin et j'ai fait des mesures en mouvement. Mais j'ai dû réécrire une partie du code et effectuer le mouvement plusieurs fois (ou à un stade ultérieur). Il semble que cela soit lié aux données de SPSession qui ne sont pas entièrement synchronisées / à jour (?) Car il est possible de déplacer les listes de lecture lors de la connexion plus tard avec une nouvelle session.

Est-il possible que ce soit un problème de synchronisation, c'est-à-dire que libspotify croit que le SPPlaylistFolder est créé et se déplace SPPlaylistS pour lui, sans qu'il soit encore créé?

Était-ce utile?

La solution

Après avoir mis à jour mon code en référence à ce problème sur cocoalibspotify, ça marche mieux. Ce que je ne savais pas au début, c'est comment la synchronisation avec le service Spotify a fonctionné. Il peut facilement prendre plusieurs minutes pour que les modifications soient reflétées dans le client Spotify Desktop, par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top