Перемещение списка воспроизведения в папку не работает

У меня проблемы с перемещением недавно созданного SPPlaylist к (возможно, недавно создан) SPPlaylistFolder,

Идея состоит в том, чтобы создать папку в учетной записи Spotify пользователя, в которую я могу добавить списки воспроизведения, сгенерированные из моего приложения. Если такая папка не была создана, я создаю новую SPPlaylistFolder и сохраните идентификатор папки для дальнейшего использования.

Это то, что я делаю (я пропустил части кода, которые не интересны для этой темы):

  1. Если folderId ранее был сохранен (т. е. создана папка), используйте этот идентификатор для загрузки экземпляра папки:

    ...
    
    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. Создать SPPlaylist: [[[SPSession sharedSession] userPlaylists] createPlaylistWithName:@"My Playlist"],

  3. Используйте КВО, чтобы наблюдать за контейнером playlists свойство и получить уведомление, когда список воспроизведения был создан: [[[SPSession sharedSession] userPlaylists] addObserver:self forKeyPath:@"playlists" options:0 context:nil],

  4. Соблюдайте playlists и переместить созданный плейлист в мой SPPlaylistFolder (containerPlaylist список воспроизведения, который я определил как перемещаемый):

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

После этих шагов и список воспроизведения, и папка были созданы, но список воспроизведения не был перемещен. И я не получаю никаких ошибок, указывающих на неправильный ввод в movePlaylistOrFolderAtIndex метод.

Я что-то упускаю здесь очевидное? Или функциональность перемещения как-то несовершенна?

Примечание. Я также пытался использовать этот код для перемещения ранее созданных списков воспроизведения (т.е. переместить все списки воспроизведения с именем "Мой список воспроизведения" в папку).

РЕДАКТИРОВАТЬ 1: Я исследовал это немного дальше, и на самом деле происходит некоторое движение. Но мне пришлось переписать часть кода и выполнить перемещение несколько раз (или на более позднем этапе). Похоже, что это связано с тем, что данные в SPSession не полностью синхронизированы / обновлены (?), Поскольку возможно перемещать списки воспроизведения при входе в систему позже с новым сеансом.

Возможно ли, что это проблема синхронизации, то есть libspotify считает, что SPPlaylistFolder создается и движется SPPlaylistс этим, без того, чтобы это фактически не было создано?

1 ответ

Решение

После обновления моего кода со ссылкой на эту проблему на cocoalibspotify, он работает лучше. Сначала я не понял, как работает синхронизация с сервисом Spotify. Например, для отражения изменений в клиенте Spotify для настольного компьютера может потребоваться несколько минут.

Другие вопросы по тегам