将曲目添加到已加星标的播放列表时出现NSArray异常

时间:2012-03-01 20:27:57

标签: ios spotify playlist

有时候,当我试图在 cocoalibspotify 中“加注”一首曲目时,我会遇到一个致命的例外。我正在使用拥有大量数据集的用户登录(数百个播放列表,但<15个已加星标的曲目)。

这就是我“加注”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的{​​{1}}属性似乎是指播放列表元数据,而不是其曲目(?)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你得到了所以看起来你不应该直接操纵那个数组。而是致电[myTrack setStarred:YES];

基本上,我只是通过整个Spotify API找到答案。

答案 1 :(得分:0)

完整的代码示例:

-(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];

        }];
    }
}];

}