gpt4 book ai didi

objective-c - 难以访问 XML 文件中的 URL 列表

转载 作者:行者123 更新时间:2023-11-28 17:41:35 25 4
gpt4 key购买 nike

我正在尝试制作一个播放 MP3 歌曲的应用程序。我的程序流程是这样的:

我的网站中有一个 XML 文件:http://jeewanaryal.web44.net/SongsXML/songsListXML.xml .它具有歌曲名称和这些歌曲在 Internet 上的实际 URL。我的流行歌曲部分有以下代码:

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(@"\n\n -- URL STRING : %@ \n\n",urlString);

}

myData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString1]];

player = [[AVAudioPlayer alloc] initWithData:myData error:nil];

[player play];
[player numberOfLoops];
[player currentTime];

这对单首歌来说效果很好;也就是说,它只播放我的 XML 文件的最后一个 URL。我想让所有歌曲都一首播放,在我的应用程序上制作“下一首”和“上一首”按钮。

您能告诉我如何实现吗?我正在使用 XMLReader.h 和 XMLReader.m 文件将数据从 XML 解析到我的应用程序中。

最佳答案

您需要将 arrayOfSongs 存储在类中的某个位置。 “后退”和“下一步”按钮需要单独的操作(例如 playPreviousSongplayNextSong)。这些方法看起来像这样:

-(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--;
}

关于objective-c - 难以访问 XML 文件中的 URL 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7937259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com