Я бы хотел немного очистить свой код и извлечь блок завершения для его собственного метода. Насколько я понимаю, я должен определить typdef
с той же подписью. В приведенном ниже примере я хочу переместить обработчик завершения NSURLSessionUploadTask
в его собственный метод. Я посмотрел на документацию Apple и другие вопросы SO, но я не знаю, ищу ли я правильную вещь.
typedef void (^PostCompletionHandler)(NSData *data,NSURLResponse *response,NSError *error);
@interface MyDemoClass() {
@property (copy, nonatomic) PostCompletionHandler completePostHandler;
@end
@implementation MyDemoClass
- (void) post {
NSData *postData = //data to pos;
NSMutableURLRequest * req = //create request;
NSURLSession * session = // create session;
NSURLSessionUploadTask *queryTask = [session uploadTaskWithRequest:req
fromData:postData
completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
if (error) {
NSLog(@"Error: %@",error.localizedDescription);
} else {
NSDictionary * response = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSLog(@"Post Response: %@",response.description);
}
}];
[queryTask resume];
}
- (void)someMethodThatTakesABlock:(PostCompletionHandler)blockName {
}
@end
Это то, что я хотел бы сделать, это примерно так:
NSURLSessionUploadTask *queryTask = [session uploadTaskWithRequest:req
fromData:postData
completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
// What do I do here?
}];
- (void)someMethodThatTakesABlock:(PostCompletionHandler)blockName {
//how do I access the data, response and error parameters?
if (error) {
NSLog(@"Error: %@",error.localizedDescription);
} else {
NSDictionary * response = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSLog(@"Post Response: %@",response.description);
}
}