Ios 如何知道成功或失败块是在AFNetworking中执行的

Ios 如何知道成功或失败块是在AFNetworking中执行的,ios,objective-c,afnetworking,Ios,Objective C,Afnetworking,我正在使用AFNetworking。我创建了一个名为MyRequest的类,它扩展了NSObject。我创建了一个名为requestForPost的方法 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": variable1}; [manager POST:@"http://app.com/resources"

我正在使用
AFNetworking
。我创建了一个名为
MyRequest
的类,它扩展了
NSObject
。我创建了一个名为
requestForPost
的方法

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": variable1};
[manager POST:@"http://app.com/resources" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);


} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);

}];
当我要调用
webservice
时,我将参数字典传递给上面的方法,以便它执行
webservice


我应该如何知道
webservice
请求是成功还是失败。如何将结果传递回我调用上述
webservice

ViewController
,使用与AFNetworking相同的方法:使用块。一个代表成功,一个代表失败。在
UIViewController
中使用这种方式,您将知道您的请求是成功还是失败,并且返回了对象

在API文件中:

- (void)yourAPIMethodWithSuccess:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @{@"foo": variable1};
    [manager POST:@"http://app.com/resources" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
        success(responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
        failure(error);
    }];
}
在控制器中:

- (void)fetchDataForRequest{
    YourAPIInstance yourAPIMethodWithSuccess:^(id expectedObject) {
        NSLog(@"Success: %@", expectedObject);
    } failure:^(NSError *error) {
        NSLog(@"Request failed: %@", [error localizedDescription]);
    }];
}

创建自定义网络层类以与服务器交互,您可以在其中自定义处理任何请求结果/错误。然后在视图控制器中使用此类


在这种情况下,您可以在一个地方更改代码,并可以确保所有应用程序的所有内容都将更改,您在其中使用此网络层类

我希望在另一个类中使用post request方法,并根据需要调用它。这样我可以保证我的代码是干净的。但是,我如何知道是否执行了成功或失败块?如果您只想返回一个
BOOL success
,您必须返回如上所述的块。我为您的控制器添加了一个示例。如果您的请求失败,您将处于失败块中,如果在成功块中成功。之后,您可以在成功块中获得的对象后面添加更多检查。。。您可以根据需要自定义块的返回,如@boorangerf所述。例如,您的请求将花费5秒钟。viewcontroller中的代码在请求完成之前不会暂停5秒,但它将继续执行viewcontroller中的其余代码。我想我必须使用协议来实现这一点。请告诉我这不是问题。块不会阻止您的执行,但仅当您的请求完成时才会调用。如果您有一些需要执行回调的代码,只需将其放入块中即可。协议也会起作用,这只取决于你在两者之间喜欢什么。就我个人而言,我会建议你阻止这个案子。