0

インターネットから音楽をダウンロードするためのクラスを作成しましたが、最初の曲のダウンロードが完了した後に曲をダウンロードしようとすると、エラーが発生しました

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



  }

最初のダウンロードを完了した後、次のダウンロードをクリックするとアレイが空になります。解決策はありますか?

4

1 に答える 1

0

曲のダウンロードが完了するたびに、新しい NSMutableArray を割り当て、それを URLTitle に割り当て、新しくダウンロードしたオブジェクトをそこに追加します。既存の NSMutableArray にオブジェクトを追加するのと同じではないため、新しい曲をダウンロードするたびに最初に空になります。

viewDidLoad メソッドで URLTitle を 1 回だけ割り当てるようにしてください。

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

そして、 connectionDidFinishLoadingメソッドに[URLTitle addObjectsFromArray:title];そのまま残します。

于 2013-06-01T10:14:35.157 に答える