2014-02-18 5 views
0

Я уже некоторое время борется с этим и оглядывался за советом от любого, кто работал с CocoaLibSpotify на iOS (точнее, iOS 7).Элементы SPPlaylist как SPTracks не загружаются (последовательно)

Я пытаюсь загрузить все элементы (SPTrack) в список SPPlaylist. Я просмотрел пример кода и документацию, поэтому я знаю, что лучший способ наблюдать за вещами - с KVO, однако я не вижу, как это лучший способ.

Глядя на «Угадай Into» пример и другие источники на GitHub и в Интернете в целом, прецессию я делаю это следующим образом:

  1. Получить SPPlaylist (это либо непосредственно из пользователи плейлисты или созданные из сохраненного URL)
  2. Загрузите плейлист с SPAsyncLoading,
  3. Loop хотя SPPlaylistItems вернулся в SPPlaylist и получить все объекты SPTrack,
  4. Передайте массив SPTrack объектов в другую SPAsyncLoading звонок,
  5. Показать все элементы из массива loadedItems.

Шаг 5 - это то, что кажется неправильным. Иногда это нормально, и я получаю все треки в отображении списка воспроизведения. Однако большую часть времени он не загружает их или загружает только несколько (обычно очень мало).

Я заметил, что перезапуск телефона иногда может заставить его работать. Хотя после запуска приложения (или изменения плейлиста) пару раз, он перестает работать снова.

Когда я вхожу каждый шаг я получаю что-то вроде следующего:

-[ViewController sessionDidLoginSuccessfully:] 
Load playlist with URL: spotify:user:XXXXX:playlist:XXXXXXXXXXXXXXXXXXXXXX 
Created playlist: <SPPlaylist: 0x16775bc0>: (null) (0 items) 
Loaded playlist: <SPPlaylist: 0x16775bc0>: Playlist Name (59 items) 
Created SPTrack items: 59 
Loaded SPTrack items: 1 
Failed to load SPTrack items: 58 

Как вы можете видеть, пользователь вошел в систему с действительным сессии. Каждый шаг работает в соответствии с планом до конца. Иногда, даже если он загружает трек, он не позволит мне играть в него так же, как и возвращение SP_TRACK_AVAILABILITY_UNAVAILABLE.

Я также добавил ниже фрагмент кода, если это поможет. Но любая помощь была бы признательна с этой точки зрения.

Спасибо.

- (void)loadPlaylist 
{ 
    __weak NSURL *spotifyURL = <URL from saved SPPlaylist>; 
    NSLog(@"Load playlist with URL: %@", spotifyURL); 
    [SPPlaylist playlistWithPlaylistURL:spotifyURL inSession:[SPSession sharedSession] callback:^(SPPlaylist *playlist) { 
     _spotifyPlaylist = playlist; 
     NSLog(@"Created playlist: %@", _spotifyPlaylist); 
     [SPAsyncLoading waitUntilLoaded: _spotifyPlaylist timeout:kSpotifyTimeout then:^(NSArray *loadedItems, NSArray *notLoadedItems) { 
     NSLog(@"Loaded playlist: %@", _spotifyPlaylist); 
     if ([loadedItems count] > 0) 
      [self loadSpotifyPlaylist]; 
     }]; 
    }]; 
} 

- (void)loadSpotifyPlaylist 
{ 
    NSArray *tracksArray = [self tracksFromPlaylistItems:[_spotifyPlaylist items]]; 
    NSLog(@"Created SPTrack items: %d", [tracksArray count]); 

    if (tracksArray && [tracksArray count] > 0) 
    { 
     [SPAsyncLoading waitUntilLoaded:tracksArray timeout:kSpotifyTimeout then:^(NSArray *loadedItems, NSArray *notLoadedItems) { 
      _playlist = loadedItems; 
      NSLog(@"Loaded SPTrack items: %d", [loadedItems count]); 
      NSLog(@"Failed to load SPTrack items: %d", [notLoadedItems count]); 

     [self finishReloadData]; 
    }]; 
} 

_spotifyPlaylist и _playliststrong оба экземпляра и tracksFromPlaylistItems: тот же метод, используемый в «Угадай Info» образец кода.

Редактировать: kSpotifyTimeout таймаут установлен на 10.0.

ответ

0

Какова Ваша ценность kSpotifyTimeout? Я думаю, что то, что вы видите, это просто тот факт, что метаданные могут занять много времени (особенно вчера, когда бэкэнд Spotify, похоже, имел проблемы, что может происходить время от времени).

Как правило, загрузка всего содержимого плейлиста сразу является плохой практикой, и вы увидите, что Guess the Intro действительно не заботится о том, загружены все треки или нет - он просто захватывает то, что произошло для загрузки и использования эти треки для игры.

Хороший подход - это разбиение на страницы треков списка воспроизведения в соответствии с вашим пользовательским интерфейсом. То есть загружать только те дорожки, которые может видеть ваш пользователь, плюс, может быть, «экран» или два стоит вверх и вниз. Когда пользователь прокручивает, вы можете начать загрузку треков - UIScrollViewDelegate s -scrollViewWillEndDragging:withVelocity:targetContentOffset: особенно хорош для этого, так как он позволяет увидеть, где пользователь «приземлится» и начнет загружать треки для этой точки. Для этого используется некоторый пример кода, а также вспомогательный класс под названием SPSparseArray для частичной загрузки контента, такого как плейлисты в ветке dev CococaLibSpotify (хотя имейте в виду, что dev branch = бета-качество).

+0

'kSpotifyTimeout' в настоящее время' 10.0'. То, что вы говорите, это то, что я думал, что это может быть. Я сделал таймаут до '200.0' один раз в небольшом плейлисте, но это не помогло. Я посмотрю на результаты поискового вызова и посмотрю, поможет ли это, хотя это, похоже, происходит даже с небольшими плейлистами. Спасибо за помощь. – Baza207

+0

К сожалению, я все еще шов, чтобы иметь проблемы. Даже при загрузке 10 предметов за один раз я получаю только 1-2/10 предметов, возвращаемых в качестве загружаемых. Я пробовал несколько плейлистов, и получаю те же результаты. Любые другие предложения? – Baza207

+0

Я видел, что API метаданных действует в течение последнего дня или около того. Вероятно, это временная проблема с обслуживанием. – iKenndac

 Смежные вопросы

  • Нет связанных вопросов^_^