【发布时间】:2013-11-28 14:31:40
【问题描述】:
我有一个 NSArray 的歌曲,想把它们放在一个播放列表中。当我播放播放列表时,我使用indexOfObject 来计算队列中的当前歌曲索引。我已经覆盖了isEqual,所以为了表明两个媒体项目是相同的,并且不希望使用这种方法来破解。我尝试了 NSOrderedSet 而不是 NSArray ,它显示每首歌曲一次,而不是同一首歌曲的实例数。他们是一个混合了 NSArray 和 NSOrderedSet 的类,这样每个索引都是一个唯一的对象,但在不同的索引处可以有重复的对象?
代码:
- (PlayerItem *)nextSong{
if(queue.count > 0){
NSInteger songIndex = [queue indexOfObject:currentSong];
NSLog(@"%ld in %lu", (long)songIndex, (unsigned long)queue.count);
songIndex = songIndex + 1;
if (songIndex < [queue count]){
return queue[songIndex];
}else{
return queue[0];
}
}
}
return nil;
}
来自下方的评论:
我的意思是,如果我循环播放歌曲,它就可以播放歌曲 1,然后再播放 1 然后是 2,然后是 3,然后是 3。这是不可能的,因为 indexOfObject 总是返回第一个重复的对象。
【问题讨论】:
-
我并没有真正得到你想要达到的目标。要么对象在您的数据表示中是唯一的,要么不是。我不知道对象如何是唯一的,同时又有重复...
-
我的意思是如果我循环播放歌曲,它可以播放歌曲 1,然后再播放 1,然后再播放 2,然后再播放 3,然后再播放 3。这是不可能的,因为 indexOfObject 总是返回第一个重复的对象。
-
为什么要使用
indexOfObject访问播放列表中的歌曲?您只是在列举播放列表的内容还是完全不同的内容? -
我在列举它。我有一个方法,通过获取当前歌曲的索引并添加一个来调用下一首歌曲。
-
为什么要手动增加索引?如果您使用枚举,您将拥有索引。如果您使用快速枚举,您将拥有这首歌。你能给我们看一些代码吗?
标签: ios objective-c cocoa-touch cocoa nsarray