我正在编写一个ios应用程序,它必须在应用程序的各个屏幕上从API发送和接收数据。目前,每个视图控制器都在调用此代码
// AFAppDotNetAPIClient is a subclass of AFHTTPClient, which defines the base URL and default HTTP headers for NSURLRequests it creates
[[AFAppDotNetAPIClient sharedClient] getPath:@"stream/0/posts/stream/global" parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {
NSLog(@"App.net Global Stream: %@", JSON);
} failure:nil];
我想保留 DRY ,因此我创建了一个请求的构建器和响应处理程序来创建请求和解析响应。我还想将所有API调用移动到一个类,但由于它使用块我不知道如何做到这一点。
有人可以解释这是如何完成的,所以我用一个enum和一些params调用一个方法来获取请求,我可能只是在没有API调用和所有视图控制器中的块的情况下得到NSDictionary
。感谢
答案 0 :(得分:1)
这是MVC架构的Model部分的一个问题。示例项目有一个很好的实现:
+ (void)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block;
在模型上定义类方法,负责发出请求(将任何方法参数转换为请求参数)并从响应中序列化对象。
答案 1 :(得分:0)
定义新界面以包含枚举,参数和块。将块定义为BOOL
(状态)和NSDictionary
(结果)。这基本上只是简化和抽象接口远离客户端,路径和操作。然后在success
和failure
块中,您可以使用适当的参数调用外部块。
该块需要维护接口的异步性质。您可以使用目标和选择器,但这将代码更多,灵活性更低。你不能让方法只返回结果字典。
显然,有许多其他选项可以传递给方法和块中的参数。