我正在学习Objective-c和cocoa触摸,同时构建应用程序,所以我有一个相当简单的问题(我认为),抱歉我没有足够的布朗尼点在网站上显示我网站的视觉图。
但是让我解释一下,我有以下
ViewController A,B和C都具有Main ViewController正在使用的协议委托 ViewController 1和2具有ViewController C正在使用的协议委托。
但是我还需要ViewController C作为Main ViewController的委托。
因此我最近在Main ViewController中创建了一个协议委托,但是当我尝试将ViewController C指定为委托时,我遇到了错误,更特别是在尝试将Main ViewController的头文件导入View Controller C时由于以下原因导致编译失败的消息
我想要完成的是什么?两个视图控制器可以相互委托吗?如果没有什么是完成我正在做的事情的想法?
在ViewController中,CI尝试了另一种方法,通过创建父视图控制器的指针来调用Main ViewController,创建ViewController B的实例(这就是我希望委托工作的原因),然后将ViewControler B的视图添加到我创建的新指针,这编译但不起作用(我会尝试找出原因,这不是我在这里要求的)。
非常感谢,我现在非常感谢这个网站
答案 0 :(得分:1)
这闻起来很糟糕的应用程序设计。但要解决编译错误,您只需执行以下操作:
@protocol SomeDelegate;
@interface FooThatUsesSomeDelegate : NSObject {
id<SomeDelegate> delegate_;
}
@end
通过转发声明 SomeDelegate
,您不必将头文件包含在完全声明的位置。这对于两个类彼此依赖的情况非常有用。
您必须在实现源文件中包含头文件。但这通常不是问题。
答案 1 :(得分:1)
注意它们可以(如St3fan所述)描述,但这正是为什么应该始终在不保留引用的情况下分配代理的原因,否则每个代理都将保持另一个不被释放。
答案 2 :(得分:0)
使用ARC,您现在可以为您的代表使用弱引用:
@property(weak)id<MyDelegateProtocol> *delegate;
当取消分配其他视图控制器时,引用变为nil,并且您不需要手动跟踪其他对象生命周期。