Objective c 对NSMutableArray进行洗牌和取消洗牌(查找正确的索引)
我正在我的应用程序中安装一个音乐播放器,当用户选择一个播放列表时,他们可以控制随机播放和重复播放模式 最初,播放列表的单个Objective c 对NSMutableArray进行洗牌和取消洗牌(查找正确的索引),objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我正在我的应用程序中安装一个音乐播放器,当用户选择一个播放列表时,他们可以控制随机播放和重复播放模式 最初,播放列表的单个MPMediaItems存储在NSArray中(然后由播放音乐的功能处理)。当用户将洗牌模式切换为ON时,阵列将复制到NSMutableArray,对象将被洗牌(当前播放的歌曲索引为0)。在这一点上我很好;当用户关闭洗牌模式时,问题就会出现 就像在iPod音乐应用程序中一样,当用户关闭洗牌模式时,原始播放列表将恢复,当前播放的歌曲的位置将显示在原始阵列中 基本上,我希望这种情
MPMediaItem
s存储在NSArray
中(然后由播放音乐的功能处理)。当用户将洗牌模式切换为ON时,阵列将复制到NSMutableArray
,对象将被洗牌(当前播放的歌曲索引为0)。在这一点上我很好;当用户关闭洗牌模式时,问题就会出现
就像在iPod音乐应用程序中一样,当用户关闭洗牌模式时,原始播放列表将恢复,当前播放的歌曲的位置将显示在原始阵列中
基本上,我希望这种情况发生:
谢谢 为放入NSArray的对象添加orderValue,该值将等于对象索引。因此,您可以洗牌一个数组,并根据该值恢复原始顺序。只是为了澄清,我应该为当前正在播放的项目添加
setValue
,这样我就可以知道它在原始数组中的位置了?你能给出一个简短的伪代码吗?是的。您可以创建自己的类,它将包括音乐文件路径(或者我不知道您是如何做到的…)和附加值,如NSNumber
。所以,当您从类中放置对象引用时,您将它与它自己的属性一起放置。根据此模型,您将获得[[myplaylayarray objectAtIndexPath:i]orderValue].intValue的访问权限(例如)(我使用了NSNumber
,因为CoreData framework像往常一样为托管类中的整数值创建了这种类型)。哦,我现在看到了您的问题。对于切换随机播放模式的方法,您可以设置@property
值,该值将以随机播放模式存储当前歌曲编号,如increment。因此,最大值将等于NSMutableArray
计数。当用户在洗牌模式下按“下一步”按钮时,您可以增加此属性值,当用户禁用洗牌时,您可以在此值索引处将播放器切换到歌曲。这不起作用,因为您无法保证洗牌数组中属于该索引的歌曲与原始数组中的歌曲相同。但是你的第一个答案给了我另一个方法。当然,你应该访问原始的NSArray
对象索引:)最简单的方法就是释放你的NSMutableArray
并在NSArray
中再次设置它,而不需要乱序。若无序和有序的歌曲都会增加属性值,你们可以随时切换到必要的位置。也许我已经失去了你主要想法的一些细节。无论如何,我很高兴我用另一种方法帮助了你;)