【发布时间】:2012-03-01 20:27:56
【问题描述】:
有时,当我尝试在 cocoalibspotify 中为曲目“加注星标”时,我遇到了一个致命的异常。我正在使用具有大量数据集(数百个播放列表,但
这就是我“明星”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
...
这似乎只在登录后一两分钟内发生(即加载用户数据),所以我猜这可能是数据未完全加载或其他什么的问题?
我试图找出是否有任何要观察的属性,以便找出所有内容何时已完全加载。但是由于数组可能是空的(并且用户之前可能没有为任何曲目加注星标),似乎没有很好的方法来验证所有内容都已加载......? SPPlaylist 的 loaded 属性似乎指的是播放列表元数据,而不是它的曲目 (?)。
有什么想法吗?
【问题讨论】:
-
你能告诉我你在哪里实例化数组'items'的代码吗?
-
其实,现在我再看一遍。看起来有一个 NSArray 实例正在观察 NSMutable 数组。正是 NSArray 产生了错误。不是 NSMutableArray。
-
是的,我相信这就是
cocoalibspotify库中发生的事情,这是处理更改的库(与此问题有关)。在github.com/spotify/cocoalibspotify/tree/master/common 中查看SPPlaylist.m