Перемещение списка воспроизведения в папку не работает - PullRequest
1 голос
/ 27 февраля 2012

У меня проблемы с перемещением недавно созданного 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. Используйте KVO для просмотра свойства контейнера 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 s, но на самом деле он еще не создан?

1 Ответ

0 голосов
/ 19 марта 2012

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

...