2013-11-28 7 views
0

У меня есть NSArray песен и хочется помещать их в список воспроизведения. Когда я играю в плейлист, я использую indexOfObject для определения индекса текущей песни в очереди. Я уже преодолел isEqual, поэтому, чтобы показать, что два медиафайла были одинаковыми и предпочли бы не взламывать этот метод. Я попробовал NSOrderedSet вместо NSArray, и он отображал каждую песню один раз, а не количество экземпляров одной и той же песни. Является ли их классом, который смешивает NSArray и NSOrderedSet, так что каждый индекс является уникальным объектом, но могут быть дублированные объекты с разными индексами?indexOfObject с дублирующимися объектами

Код:

- (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 всегда возвращает первый дублирующий объект.

+0

Я действительно не понимаю, чего вы хотите достичь. Либо объекты уникальны внутри вашего представления данных, либо нет. Я не знаю, как объекты могут быть уникальными и в то же время иметь дубликаты ... – slecorne

+0

Я имею в виду, если я буду цитировать песни, чем это может сыграть Song 1, затем 1 снова, затем 2, затем 3, затем 3 снова. Это невозможно, потому что indexOfObject всегда возвращает первый дублирующий объект. – kezi

+0

Почему вы используете 'indexOfObject' для доступа к песням в плейлисте? Вы просто перечисляете содержимое плейлиста или что-то совсем другое? – neilco

ответ

0

Проблема заключается в том, как вы выяснить, какие песни из списка воспроизведения воспроизводится в данный момент: Вы, кажется, хранить currentSong в Ивар или около того.

Как нельзя возможно, что эта песня дважды появляется в плейлисте, этого недостаточно, чтобы знать, что играет. Пример:

«Мой плейлист - это A, A, B, C, C. Прямо сейчас играет А».

Как вы можете видеть, из этой информации вы не можете знать, какая следующая песня.

Решение будет состоять в том, чтобы сохранить индекс в плейлисте или другую информацию, чтобы узнать о прогрессе в плейлисте.

+0

Thats маршрут, который я закончил использовать, но мой единственный страх в том, что при просмотре списков воспроизведения индекс не будет сброшен, и он назвал бы индекс, который невозможен. Я думаю, это просто требует тестирования. Благодаря! – kezi

Смежные вопросы