2012-12-18 9 views
0

대기열에 5 NSOperations이 있습니다. 큐의 setMaxConcurrentOperationCount은 1로 설정되어 있습니다. 각 작업은 기본적으로 특정 파일을 다운로드하기위한 서버 호출입니다.NSOperationQueue로 추적 다운로드

파일을 디스크에 저장할 때 하나의 파일 다운로드가 완료되어 NSOperation에만이 시작되면 추적하는 가장 좋은 방법은 무엇입니까? 또는 NSOperations에서 파일 다운로드 진행 상태를 알 수있는 방법이 있습니까?

+0

자동으로 실행을 시작합니다 나는 확실하지 않다. 그러나 당신은이 목적을 위해 중첩 된 디스패치 큐를 사용할 수있다. 쉽고 적은 코드가 될 것이다. –

+0

@iVishal 내가 걱정하는 한, NSOperationQueue는 GCD 위에 구축되므로 기본적으로 같은 것이다. . –

답변

1

당신은 단순히 NSOperation를 서브 클래 싱 수행 다운로드하고 NSOperation 서브 클래스의 그리고 당신의 작업 후 -main 방법으로 파일 시스템 데이터를 저장하기위한 코드를 넣을 수 있습니다, NSOperationQueue의 다음 작업은

@implementation MyOperation 

- (void) main { 
    if ([self isCancelled]) { 
     NSLog(@"** operation cancelled **"); 
    } else { 
     NSURL *conUrl = [NSURL URLWithString: urlString]; 
     NSError *error; 
     NSData *conData = [NSData dataWithContentsOfURL: conUrl options: NSDataReadingMappedIfSafe error: & error]; 
     if (!error) { 
      UIImage *image = [ 
       [UIImage alloc] initWithData: conData]; 

      NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex: 0]; 
      NSString *jpgFilePath = [NSString stringWithFormat: @"%@/%@.jpg", cacheDir, textLabel]; 
      conData = [NSData dataWithData: UIImageJPEGRepresentation(image, 1.0f)]; 
      [conData writeToFile: jpgFilePath atomically: YES]; 
     } 
    } 

    NSLog(@"Operation finished"); 
} 


@end 
+0

다음 NSOperation을 정확히 시작하려면 어떻게해야합니까? NSOperationQueue주기에서 어떤 값을 확인해야합니까? –

+0

-addOperation 메서드를 호출하여 모든 작업을 NSOperationQueue에 한 번에 추가 할 수 있습니다.이 작업은 자동으로 처리됩니다. 도움이 더 필요하면 알려주세요. – Oleg

1

NSOperation 하위 클래스에서 isFinished 메서드를 재정의하여 YES을 실제로 완료 한 경우에만 반환해야합니다.

관련 문제