NSArray исключение при добавлении трека в помеченный плейлист - PullRequest
0 голосов
/ 02 марта 2012

Иногда я получаю фатальное исключение, когда пытаюсь «пометить» трек в cocoalibspotify . Я вхожу в систему с пользователем с тяжелым набором данных (сотни списков воспроизведения, но <15 отмеченных композиций). </p>

Вот как я "звезда" SPTrack:

[[[[SPSession sharedSession] starredPlaylist] items] addObject:myTrack];

... и трассировка стека:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSArray objectsAtIndexes:]: index 12 beyond bounds [0 .. 11]'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x01e125a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x021a1313 objc_exception_throw + 44
    2   CoreFoundation                      0x01da0f99 -[NSArray objectsAtIndexes:] + 633
    3   Foundation                          0x016a250b -[NSKeyValueArray objectsAtIndexes:] + 110
    4   Foundation                          0x016aaca6 NSKeyValueDidChangeByArrayMutation + 103
    5   Foundation                          0x01610c30 NSKeyValueDidChange + 266
    6   Foundation                          0x016aba95 -[NSObject(NSKeyValueObserverNotification) didChange:valuesAtIndexes:forKey:] + 123
    7   Foundation                          0x016a4d0e -[NSKeyValueNotifyingMutableArray addObject:] + 239
    8   MyApp                               0x000922cd -[PlaylistManager starTrack:] + 285
    ...

Кажется, что это происходит только через минуту или две после входа в систему (то есть пользовательские данные загружены), поэтому я предполагаю, что это может быть проблемой, когда данные загружены не полностью или что-то в этом роде?

Я пытался выяснить, есть ли какие-либо свойства, которые нужно наблюдать, чтобы узнать, когда все полностью загружено. Но так как массив может быть пустым (и пользователь, возможно, не помечал какие-либо треки раньше), кажется, что нет хорошего способа проверить, что все загружено ...? Кажется, что свойство loaded SPPlaylist ссылается на метаданные списка воспроизведения, а не на его дорожки (?).

Есть идеи?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Вы получаете Так что похоже, что вы не должны манипулировать этим массивом напрямую. Вместо этого позвоните [myTrack setStarred:YES];

По сути, я только что прошел весь API Spotify, чтобы вы нашли этот ответ.

0 голосов
/ 18 мая 2013

Полный пример кода для этого:

-(void)starTrack:(NSString *)uri {

NSURL *trackURL = [NSURL URLWithString:uri];

[[SPSession sharedSession] trackForURL:trackURL callback:^(SPTrack *track) {

    if (track != nil) {

        [SPAsyncLoading waitUntilLoaded:track timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *tracks, NSArray *notLoadedTracks) {

            [track setStarred:YES];

        }];
    }
}];

}

...