2017-01-19 1 views
0

여기에 붙어 있습니다. 나는 이미지를 다운로드하기 위해 만드는 커스텀 클래스를 가지고있다. 내가하고 싶은 것은 메소드 중 하나에 대한 완료 블록을 만드는 것입니다. 예를 들어사용자 정의 객체 다운로드 관리자

:

CustomObj *obj = [[CustomObj alloc] init]; 
[obj downloadImage:url withCompletion:(BOOL *finished) { 

//do stuff 
}]; 

문제가 CustomObj에, 나는 이미지를 다운로드 2 NSURLSessions를 사용하여 이러한 각각의 블록입니다. 기본적으로 첫 번째 세션이 먼저 시작되고 첫 번째 세션이 완료되면 두 번째 세션이 실행되고 두 번째 세션이 완료되면 맞춤 완료를 시작합니다. 어떻게해야할지 모르겠다. Pls 감사합니다.

+0

그래서 문제가 무엇입니까? –

+0

다른 완료 후 해고되는 커스텀 클래스의 완성 방법. – GeneCode

답변

2

당신은 그런 Customobj.m

+(void)downloadImage:(NSString *) url 
      success:(void(^)(BOOL finished))success 
      failure:(void(^)(NSString *errorMessage))failure 

{ 
    if(success) 
    { 
    success(success); 
    } 
    else{ 
    failure(errorMessage); 
    } 
} 

에서이

에서 Customobj.h

+(void)downloadImage:(NSString *) url 
       success:(void(^)(BOOL finished))success 
       failure:(void(^)(NSString *errorMessage))failure; 

같이 할 수있는 당신이 그것을 좋아 사용할 수 있습니다

[Customobj downloadImage:url success:^(BOOL finished) { 

    } failure:^(NSString *errorMessage) { 

    }]; 
+0

성공시 오류가 발생합니다 (예). "성공"에 대한 암시 적 선언은 C99에서 유효하지 않습니다. – GeneCode

+0

좋습니다. 그 오류는 나쁘다. 나는이 대답을 곧 받아 들일 것이다. – GeneCode

1

당신이 할 수있는 절대적으로 다른 블록 내에 블록을 중첩합니다.

어떻게 작동하는지 보여주는 간단한 예입니다. 물론 여기에 방법이 꽤 비어 있습니다하지만 당신은 아이디어 그래서 그것은 단지입니다 :

당신이 방법 buttonPress를 호출 할 때마다
- (void) networkCallWithCompletionBlock:(void (^)(NSString *response))completed { 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     completed(@"My amazing response"); 
    }); 
} 

- (void) methodWithCompletionBlock:(void (^)(BOOL success))completed { 
    [self networkCallWithCompletionBlock:^(NSString *response) { 
     completed([response isEqualToString:@"My amazing response"]); 
    }]; 
} 

- (void) buttonPress() { 
    [self methodWithCompletionBlock:^(BOOL success) { 
     NSLog(@"%@", @(success)); 
    }]; 
} 

, 그것은 두 개의 비동기 방식의 체인을 트리거, 그리고 메시지가 후 0.5 초를 인쇄 할 수 있습니다 .

+0

합법적 인 것 같습니다. 나는 이것을 시도 할 것이다. – GeneCode