自定义对象下载管理器

Custom Object Download Manager

我被困在这里了。我创建了一个自定义 class 来下载图像。我想要做的是为其中一种方法制作一个完成块。

例如:

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

 //do stuff
}];

问题出在 CustomObj 中,我使用 2 个 NSURLSession 下载图像,每个都是块。基本上第一个会话首先开始,然后第一个会话完成,将 运行 第二个会话,并且在第二个会话完成时,我想触发我的自定义完成。不知道该怎么做。请帮忙谢谢。

你可以这样做

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) {

    }];

您绝对可以在其他块中嵌套块。

这里有一个小例子来展示它是如何工作的。显然这里的方法很空白,但这只是让你有一个想法:

- (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秒后打印消息。