以下是我的设置:
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
- > 服务器
请帮我拆除这个烂摊子或解决方案。 另外,我如何将当前实例的类传递给另一个类的新实例。
答案 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 ,只需提供所需的内容即可。