2017-01-19 121 views
0

我卡在這裏。我有一個自定義的類,我創建下載圖像。我想要做的是爲其中一種方法創建完成塊。自定義對象下載管理器

對於例如:

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

//do stuff 
}]; 

問題是在CustomObj,我使用2個NSURLSessions下載圖像,並且每個這些都是塊。基本上第一次會議首先開始,然後第一次會議完成,將運行第二次會議,並在第二次會議完成後,我想開始我的自定義完成。不知道如何做到這一點。請幫助謝謝。

+0

所以這是什麼問題? –

+0

如何完成自定義類,在完成另一個完成後觸發。 – GeneCode

回答

2

你可以這樣做

Customobj.h

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

Customobj.m

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

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

然後你可以使用它像:

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

    } failure:^(NSString *errorMessage) { 

    }]; 
+0

成功時出錯(YES);隱式聲明「成功」在C99中是無效的 – GeneCode

+0

好的,這似乎工作。錯誤是我的錯。我很快就會接受這個答案。 – GeneCode

1

你可以絕對嵌套在其他人的內部。

下面是一個小例子,以說明它是如何工作的。顯然,這裏的方法是相當空,但它只是讓你有一個想法:

- (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)); 
    }]; 
} 

每當你調用該方法buttonPress,就會引發兩個異步方法的鏈,和之後的消息將被打印0.5秒。

+0

看起來合法。我會試試這個。 – GeneCode