自定义对象下载管理器
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秒后打印消息。
我被困在这里了。我创建了一个自定义 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秒后打印消息。