解决MVC混乱问题

时间:2013-08-07 13:44:49

标签: ios objective-c

以下是我的设置:

  • Controller(.h / .m)
  • ConnectionManager(.h / .m) - 使用AFNetworking发送请求
  • RequestHandler(.h / .m) - 构建请求参数
  • KeyManager(。h / .m) - 写入数据库

我必须使用KeyManager的一些数据向服务器发送请求。

此处使用ConnectionManager中的AFNetworking发送请求。请求的所有请求参数和URL都由RequestHandler

构成

但问题是为了构造请求我有一些从控制器请求的数据我在初始化Controller里面RequestHandlers它抛出错误控制器类型找不到

Controller - > ConnectionManager - > RequestHandler - > Controller - > ConnectionManager - > 服务器

请帮我拆除这个烂摊子或解决方案。 另外,我如何将当前实例的类传递给另一个类的新实例。

2 个答案:

答案 0 :(得分:2)

解决这些循环定义的最佳选择是仅在#import文件中使用.m指令,而是在@class文件中使用.h

所以基本上如果你需要在类Y的API中引用类X,那么在Yh中,你添加@class X,然后在Y.m中添加#import X

@class只是定义了符号。基本上告诉编译器“相信我,我会告诉你这是后来的”。然后,通过在该类的实现中使用#import来忠实于promise。

这可以解决您的问题。

答案 1 :(得分:1)

需要另一个类的实例的类的一般问题可以使用Dependency Injection模式解决

简而言之,如果您需要访问对象的实例,请在创建对象时将其提供给依赖对象。

对于RequestHandler,您可以构建一个这样的init方法。

-(instance_type)initWithController:(Controller *)acontroller
{
self = [super init];
if(self)
{
    _controller = acontroller;
}
return self;

}

或者实例上的方法

-(void)setupHandlerWithController:(Controller *)acontroller
{
//do what you need to do to setup
}

无论哪种方式都意味着您要为RequestHandler提供所需的东西,而不是尝试创建 Controller 实例以设置 RequestHandler

创建 RequestHandler ConnectionManager 可能已经需要将控制器传递给它,以便它可以将其提供给 RequestHandler

TBH我正在查看为什么 RequestHandler需要访问控制器并尝试将其分解。

RequestHandler 究竟需要控制器,并且可以直接给出这些内容。

这意味着您可以在多个地方使用 RequestHandler ,只需提供所需的内容即可。