我创建了一个从互联网下载音乐的课程,而我试图在完成第一首歌曲下载后下载该歌曲,我收到了错误
'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'
我的代码就在这里,
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
//[responseData release];
dict=[responseString JSONValue];
//title is NSArray object
title=[dict valueForKey:@"sTitle"];
URLTitle=[[NSMutableArray alloc]init];
[URLTitle addObjectsFromArray:title];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"pslamsSongs.mp3"];
NSLog(@"path %@",documentsDirectoryPath);
[receivedData writeToFile:documentsDirectoryPath atomically:YES];
if (receivedData) {
UIAlertView *alt = [[UIAlertView alloc] initWithTitle:@"Download Completed" message:@"Download Music completed, you can access the music from iTunes" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alt show];
[alt release];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [URLTitle count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
newCell = nil;
newCell = [tableView dequeueReusableCellWithIdentifier:identifier];
if(newCell == nil)
{
NSLog(@"newCell ===================");
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"downloadPageCell" owner:self options:nil];
newCell = [ nibViews lastObject];
}
newCell.downloadButton.tag=indexPath.row;
[newCell.downloadButton addTarget:self action:@selector(downloadButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
newCell.downloadButton.tag=indexPath.row;
return newCell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
-(void)downloadButtonPressed:(UIButton*)sender
{
UIButton *btn1 = (UIButton *)sender;
//**i got the error in this line**
appendString=[URLTitle objectAtIndex:btn1.tag];
appendString= [appendString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
URL= [staticURL stringByAppendingString:appendString];
NSLog(@"download button pressed");
downloadURL=[[NSURL alloc]initWithString:URL];
theRequest = [NSURLRequest requestWithURL:downloadURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
receivedData = [[NSMutableData alloc] initWithLength:0];
connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES];
}
当我完成第一个下载后,我的数组变为空,任何解决方案?
答案 0 :(得分:0)
每次下载完歌曲后,您都会分配一个新的NSMutableArray,将其分配给URLTitle,然后在那里添加新下载的对象。它与向现有NSMutableArray添加对象不同,因此每次下载新歌时它都会变为空。
尝试在viewDidLoad方法中分配一次URLTitle:
- (void)viewDidLoad
{
[super viewDidLoad];
URLTitle = [[NSMutableArray alloc]init];
}
并将[URLTitle addObjectsFromArray:title];
保留在 connectionDidFinishLoading 方法中。