AFNetworking:重用方法

Posted

技术标签:

【中文标题】AFNetworking:重用方法【英文标题】:AFNetworking : Re-use Method 【发布时间】:2015-12-28 11:20:25 【问题描述】:

我们知道我们可以从普通方法中获取返回值,例如:

-(NSString*)ASimpleFunction:(NSString*)str
    return str;

调用这个:[self ASimpleFunction:@"abc"] 将返回 "abc"

如果我在单例类中声明了它,这样我就可以在任何地方使用它:

+(NSString*)ASimpleFunction:(NSString*)str
    return str;

调用它:[Singleton ASimpleFunction:@"xyz"] 将返回 "xyz"

因此,在 Singleton 类中声明的上述方法可以通过类名本身(即Singleton)从任何地方访问/重用

同样,我想重用 AFNetworking 方法,我将传递 NSDictionary 的参数,NSString 用于 URL 等。但问题是 AFNetworking 的 Success and Failure 块不返回值。所以,我不能在成功时得到reponseObject,在失败时得到error

我是否正确地编写相同的代码,即 url、参数、[success..]/[failure..] 为每个网络请求再次阻塞?

或者有没有好的建议架构可用?

P.S - 我用谷歌搜索了很多,但一无所获。

【问题讨论】:

你必须为它创建你自己的帮助类。你的学习将在未来帮助你。尝试搜索有关如何从块中获取数据...等。 这更像是一个设计问题。您可以创建自己的使用 AFNetworking 的 BaseConnection 类。然后创建形成类的子类并使用方法创建请求并从中获取完成块。 @AshishKakkad - 就在现场。我需要学习助手和块。下面几个答案,将尝试他们。谢谢! 【参考方案1】:

您可以通过以下方式创建自己的辅助类并在任何可以使用的地方使用。

首先让我们创建方法来调用AFNetworking响应,成功和失败:

+(void)getWebserviceWithURL:(NSString*)strUrl withParam:(NSDictionary*)dictParam withCompletion:(void(^)(NSDictionary*response))completion withFailure:(void(^)(NSDictionary*response))failure withLoadingText:(NSString*)text

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

    manager.responseSerializer = responseSerializer;

    [manager GET:strUrl parameters:dictParam success:^(AFHTTPRequestOperation *operation, id responseObject) 
//        [[Helper sharedInstance] dismissProgressBar];
        completion(responseObject);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        failure([NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:error, operation, nil] forKeys:[NSArray arrayWithObjects:@"error",@"operation", nil]]);
//        [[Helper sharedInstance] dismissProgressBar];
    ];

现在您可以创建自己的方法并使用完成块获得响应、成功和失败:

- (void)WebSeries:(void(^)(bool status, NSMutableArray *seriesResponseData, NSString *compMessage))completion

    //NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"data", nil] forKeys:[NSArray arrayWithObjects:@"iComicBookId", nil]];

        NSDictionary *dict = [NSDictionary dictionaryWithObject:@"1" forKey:@"fk_iWebSeriesId"];


    [Helper postWebserviceWithURL:EPISODESURL withParam:dict withCompletion:^(NSDictionary *response) 
        NSLog(@"%@",response);
        NSMutableArray *webSeriesData = response[@"data"];

        completion(YES, webSeriesData, response[@"msg"]);

     withFailure:^(NSDictionary *response) 

     withLoadingText:@"Loading"];

希望这会有所帮助!

【讨论】:

以上是关于AFNetworking:重用方法的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 与 SDWebimage

AFNetworking:如何知道响应是不是使用缓存? 304 或 200

如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书

Xcode7 下导入第三方库 图文介绍

AFNetworking 2.0 解析的数据未显示在表格视图中

AFNetworking 的请求方法