有时候,当我试图在 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}}属性似乎是指播放列表元数据,而不是其曲目(?)。
有什么想法吗?
答案 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];
}];
}
}];
}