假设我有一个名为'ViewController'的简单UIView类,它可以访问POST请求的'API'类。
@implementation ViewController
- (void)viewDidLoad {
api = [[API alloc] init];
[api postData];
}
@end
API类将打开NSURLSession并发布数据
@implementation API
- (void)postData {
[[session dataTaskWithRequest:rq completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// show Alert in ViewController if response code is 200
}] resume];
}
@end
如何在API类的completionHandler中显示简单警报(或修改任何UIView相关对象)? 我是块概念的新手。解决这个问题的最佳方法是什么?
最好的问候。
答案 0 :(得分:1)
有多种方法可以执行此操作,但您可以执行以下操作:向postData
方法添加完成块。这是一个例子:
- (void)postDataWithCompletion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionBlock {
[[session dataTaskWithRequest:rq completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (completionBlock()) {
completionBlock(data, response, error);
}
});
}] resume];
}
这将允许您使用完成处理程序调用{{1}}方法,以便您可以使用视图控制器上返回的数据。以下是您的视图控制器中的调用方式:
postData
请记住,这只是一个如何使用块的示例 - 将原始@implementation ViewController
- (void)viewDidLoad {
api = [[API alloc] init];
[api postDataWithCompletion:^(NSData *, NSURLResponse *, NSError *) {
// update your view controller here with the right data
}];
}
@end
和NSData
对象返回到视图控制器是不好的做法,您应该编写一个API层来进行转换您的价值观与您的视图控制器友好。