'NSRangeException',原因:'*** - [__ NSArrayM objectAtIndex:]:索引1超出空数组的边界'

时间:2012-05-25 05:44:24

标签: nsurlconnection nsrangeexception

我创建了一个从互联网下载音乐的课程,而我试图在完成第一首歌曲下载后下载该歌曲,我收到了错误

 '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];



  }

当我完成第一个下载后,我的数组变为空,任何解决方案?

1 个答案:

答案 0 :(得分:0)

每次下载完歌曲后,您都会分配一个新的NSMutableArray,将其分配给URLTitle,然后在那里添加新下载的对象。它与向现有NSMutableArray添加对象不同,因此每次下载新歌时它都会变为空。

尝试在viewDidLoad方法中分配一次URLTitle:

- (void)viewDidLoad
{
    [super viewDidLoad];
    URLTitle = [[NSMutableArray alloc]init];
}

并将[URLTitle addObjectsFromArray:title];保留在 connectionDidFinishLoading 方法中。