2014-06-08 2 views
0

안녕하세요. 다음 코드가 있는데 다운로드하는 동안 ActivityIndicator를 표시하고 싶습니다. 그러나 다운로드가 완료되었을 때만 표시가 나타 납니까?NSURL 다운로드 파일 인디케이터가 너무 늦게 표시됩니다.

_fanDownloadIndicator.hidden = NO; 
NSLog(@"batzn"); 
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 
NSString *file = [documentPath stringByAppendingPathComponent:@"fan_new.mp3"]; 
BOOL fileExists = [[NSFileManager defaultManager]fileExistsAtPath:file]; 

if(fileExists == NO) { 

    NSURL *downurl = [NSURL URLWithString:url]; 
    NSData *data = [NSData dataWithContentsOfURL:downurl]; 
    if ([data writeToFile:file atomically:YES]) { 
     NSLog(@"downloaded fan"); 
+0

더 많은 코드가 있습니까? 지금 나는 당신이 표시기를 어디에 보여줄지 모르겠다. – connor

+0

@connor 코드의 첫 번째 줄은 표시기를 보여준다. – rmaddy

답변

3

문제

당신은 주 스레드에서 다운로드 작업을하고, 당신이 당신의로드보기를 표시하기 전에 스레드가 종료 할 때까지 기다립니다.

솔루션

당신은 dispatch_async 사용하여 백그라운드 스레드에서 작업을 다운로드를 시작해야합니다. 또한 내가 MBProgressHUD 당신의로드 뷰에 대한 제안을 제공합니다

_fanDownloadIndicator.hidden = NO; 
NSLog(@"batzn"); 
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 
NSString *file = [documentPath stringByAppendingPathComponent:@"fan_new.mp3"]; 
BOOL fileExists = [[NSFileManager defaultManager]fileExistsAtPath:file]; 

if(fileExists == NO) { 

//Show your loading view here 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 

      //Do your downloading here on background thread 
      NSURL *downurl = [NSURL URLWithString:url]; 
      NSData *data = [NSData dataWithContentsOfURL:downurl]; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if ([data writeToFile:file atomically:YES]) { 
        //Hide your loading view 
        NSLog(@"downloaded fan"); 
       } 
      }); 
     }); 
} 

아래의 코드를 확인하십시오. 여기에 당신이 그것으로 무엇을 할 수

//Show loading form here 
[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    // Do something... 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
    }); 
}); 

업데이트

당신은 다운로드 이미지를 처리하는 경우, 나는이 도서관 추천한다 : 그것은 또한에 제 3 자 제공

SDWebImage

을 활동 표시기를 보여줍니다.

+0

감사합니다. 이미 MBProgressHUD를 찾았지만 내 앱에서 다운로드하는 것을 보여주는 올바른 방법이 아닌 것 같습니다. 다운로드 한 이미지 뷰를 클릭하면 이미지 뷰가 생성되므로 한 번에 2 개의 이미지를 다운로드하려면 HUD가 나에게 적합하지 않을 수 있습니다. – user3195648

관련 문제