2013-05-06 27 views
0

我创建了一个应用程序,可以从任意大小的url下载文件。我在我的页面中有一个按钮和一个进度视图。我想要点击按钮下载的文件并显示下载状态进度视图。如何在xcode中使用ProgressView来显示下载的状态

我可以下载任何文件与此代码,但我不知道如何使用发展观与此代码:

- (IBAction)Download:(id)sender 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSLog(@"Downloading Started"); 
     NSString *urlToDownload = @"http://192.168.1.100/emma/Adele%20-%20Someone%20Like%20You%20(MTV%20Video%20Music%20Awards%202011)%20HD%20Live.mkv"; 
     NSURL *url = [NSURL URLWithString:urlToDownload]; 
     NSData *urlData = [NSData dataWithContentsOfURL:url]; 
     if (urlData) 
     { 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *documentsDirectory = [paths objectAtIndex:0]; 

      NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.mkv"]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [urlData writeToFile:filePath atomically:YES]; 
       NSLog(@"File Saved !"); 
      }); 
      x = 1; 
      NSLog(@"x : %d",x); 
     } 

    }); 
} 

请指导我。

回答

2

在.h文件中定义的NSTimer *定时器并设置ProgressView的.xib

- (IBAction)Download:(id)sender 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSLog(@"Downloading Started"); 
     NSString *urlToDownload = @"http://192.168.1.100/emma/Adele%20-%20Someone%20Like%20You%20(MTV%20Video%20Music%20Awards%202011)%20HD%20Live.mkv"; 
     NSURL *url = [NSURL URLWithString:urlToDownload]; 
     NSData *urlData = [NSData dataWithContentsOfURL:url]; 
     if (urlData) 
     { 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *documentsDirectory = [paths objectAtIndex:0]; 

      NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.mkv"]; 

      timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(updateProgressView) userInfo:nil repeats:YES]; 
      [timer fire]; 


      dispatch_async(dispatch_get_main_queue(), ^{ 
       [urlData writeToFile:filePath atomically:YES]; 
       NSLog(@"File Saved !"); 
      }); 
      x = 1; 
      NSLog(@"x : %d",x); 
     } 

    }); 
} 

,并添加这个方法

- (void) updateProgressView{ 
    NSString *urlToDownload = @"http://192.168.1.100/emma/Adele%20-%20Someone%20Like%20You%20(MTV%20Video%20Music%20Awards%202011)%20HD%20Live.mkv"; 
    NSURL *url = [NSURL URLWithString:urlToDownload]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.mkv"]; 
    NSData *writtenData = [NSData dataWithContentsOfFile:filePath]; 

    float progress = [writtenData length]/(float)[urlData length]; 
    [progressView setProgress:progress]; 
    if (progress == 1.0){ 
     [timer invalidate]; 
    } 
} 
+0

我的朋友,我用故事板。这段代码在xcode中是不同的? – emma 2013-05-06 08:45:57

+0

我的朋友,我在我的项目中添加此代码,但我得到这个错误:'NSDate'没有可见的@interface声明选择器'长度' – emma 2013-05-06 08:51:16

+0

更新我的答案。现在检查,让我知道:) – Ushan87 2013-05-06 09:06:44

相关问题