#objective-c #ios #cocoa-touch #nsdata
#objective-c #iOS #cocoa-touch #nsdata
Вопрос:
Я пытаюсь создать приложение, которое воспроизводит песни в формате MP3. Мой программный поток выглядит следующим образом:
У меня есть XML-файл здесь, на моем веб-сайте: http://jeewanaryal.web44.net/SongsXML/songsListXML.xml . В нем есть названия песен и фактический URL-адрес этих песен в Интернете. У меня есть следующий код для моего раздела Pop songs:
NSString *urlString = @"http://jeewanaryal.web44.net/SongsXML/songsListXML.xml";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
NSDictionary *dict = [XMLReader dictionaryForXMLData:data error:nil];
NSArray *arrayOfSongs = [[NSArray alloc] initWithArray:[[[dict objectForKey:@"list"] objectForKey:@"songs"] objectForKey:@"song"]];
StartStopSound = [UIButton buttonWithType:UIButtonTypeRoundedRect];
StartStopSound.frame = CGRectMake(60, 360, 200, 30);
[StartStopSound setTitle:@"बजाउनुहोस" forState:UIControlStateNormal];
[StartStopSound addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:StartStopSound];
back = [UIButton buttonWithType:UIButtonTypeRoundedRect];
back.frame = CGRectMake(20, 320, 100, 30);
[back setTitle:@"पछाडीको गीत " forState:UIControlStateNormal];
[back addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:back];
next = [UIButton buttonWithType:UIButtonTypeRoundedRect];
next.frame = CGRectMake(200, 320, 100, 30);
[next setTitle:@"अगाडीको गीत" forState:UIControlStateNormal];
[next addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:next];
NSData *myData = [[NSData alloc] init ];
NSString *urlString1 = [[NSString alloc] init];
for (NSDictionary *fruitDict in arrayOfSongs) {
UILabel *songTitle = [[UILabel alloc] initWithFrame:CGRectMake(40, 200, 300, 40)];
songTitle.text = [NSString stringWithFormat:@"%@",[[fruitDict objectForKey:@"title"] objectForKey:@"text"]];
[self.view addSubview:songTitle];
urlString1 = [NSString stringWithFormat:@"%@",[[fruitDict objectForKey:@"url"] objectForKey:@"text"]];
//NSLog(@"nn -- URL STRING : %@ nn",urlString);
}
myData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString1]];
player = [[AVAudioPlayer alloc] initWithData:myData error:nil];
[player play];
[player numberOfLoops];
[player currentTime];
Это отлично работает для одной песни; то есть воспроизводится только последний URL-адрес моего XML-файла. Я хочу, чтобы все песни воспроизводились одна за другой, создавая кнопки «Next» и «Previous» в моем приложении.
Не могли бы вы рассказать мне, как я могу это реализовать? Я использую файлы XmlReader.h и XmlReader.m для анализа данных из XML в моем приложении.
Ответ №1:
Вам нужно будет хранить arrayOfSongs где-нибудь в классе. Кнопки «назад» и «далее» потребуют отдельных действий (например playPreviousSong
, playNextSong
). Тогда эти методы будут выглядеть примерно так:
-(void) playPreviousSong
{
NSString *url = [[self songs] objectAtIndex:[self songIndex] - 1];
[self playSong:url];
[self setSongIndex:[self songIndex - 1];
}
Это грубая реализация, просто чтобы показать, как она сочетается. По сути, вам нужно сохранить список песен и отслеживать, какая песня «выбрана» / воспроизводится, затем просто выберите следующую / предыдущую.
Редактировать: чтобы ответить на ваш вопрос в комментариях, вы уже извлекли массив URL-адресов песен, вам просто нужно сохранить ссылку на него в классе. Например.
@interface AudioPlayer {
NSArray *_songs;
NSUInteger *_songIndex;
}
Затем @implementation
вместо создания переменной arrayOfSongs просто ссылайтесь на массив из переменной экземпляра:
_songs = [[NSArray alloc] initWithArray:[[[dict objectForKey:@"list"] objectForKey:@"songs"] objectForKey:@"song"]];
Затем, например, в методе playPreviousSong:
-(void) playPreviousSong
{
NSString *url = [_songs objectAtIndex:_songIndex - 1];
[self playSong:url];
_songIndex--;
}
Комментарии:
1. Привет @Sebnow, спасибо за ваш быстрый ответ, я использовал его как массив словаря, пожалуйста, объясните мне подробно, как я могу сохранить URL песен. Просто нужно знать, как извлечь URL-адрес из массива этого словаря … еще раз спасибо