我被困在这里。我有一个自定义类,我创建下载图像。我想要做的是为其中一个方法制作一个完成块。
例如:
CustomObj *obj = [[CustomObj alloc] init];
[obj downloadImage:url withCompletion:(BOOL *finished) {
//do stuff
}];
问题出在CustomObj中,我使用2个NSURLSessions来下载图像,每个都是块。基本上第一个会话首先启动,然后第一个会话完成,将运行第二个会话,并在第二个会话完成时,我想启动我的自定义完成。不知道怎么做。请帮助谢谢。
答案 0 :(得分: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) {
}];
答案 1 :(得分: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秒后打印出来。