Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 两个视图控制器可以互为代理吗?_Iphone_Objective C_Xcode_Delegates - Fatal编程技术网

Iphone 两个视图控制器可以互为代理吗?

Iphone 两个视图控制器可以互为代理吗?,iphone,objective-c,xcode,delegates,Iphone,Objective C,Xcode,Delegates,我在学习objective-c和cocoa touch的同时也在开发一个应用程序,所以我有一个相当简单的问题(我想),对不起,我在网站上没有足够的布朗尼点数来显示我网站的视觉图表 但让我解释一下,我有以下几点 主视图控制器 视图控制器A 视图控制器B 视图控制器C 视图控制器1 视图控制器2 ViewController A、B和C都有主ViewController正在使用的协议委托。 ViewController 1和2具有ViewController C正在使用的协议委托 但是,我还需要

我在学习objective-c和cocoa touch的同时也在开发一个应用程序,所以我有一个相当简单的问题(我想),对不起,我在网站上没有足够的布朗尼点数来显示我网站的视觉图表

但让我解释一下,我有以下几点

  • 主视图控制器
  • 视图控制器A
  • 视图控制器B
  • 视图控制器C
  • 视图控制器1
  • 视图控制器2
ViewController A、B和C都有主ViewController正在使用的协议委托。
ViewController 1和2具有ViewController C正在使用的协议委托

但是,我还需要ViewController C作为主ViewController的代理。

因此,我最近在主ViewController中创建了一个协议委托,但是当尝试将ViewController C指定为委托时,我会遇到错误,尤其是当尝试将主ViewController的头文件导入到View Controller C时,我会收到一条编译失败的消息,原因如下

  • 主ViewController头文件可以 找不到的协议 视图控制器C
  • 应为说明符限定符列表 在“ViewController C”之前
我正在努力实现的目标是可能的吗?两个视图控制器可以相互委派吗?如果不是的话,实现我正在做的事情的理想方式是什么?

在ViewController C中,我尝试了另一种方法,通过创建父视图控制器的指针调用主ViewController,创建ViewController B的实例(这就是为什么我希望代理工作),然后将ViewController B的视图添加到我创建的新指针,这会编译但不起作用(我会努力找出原因,这不是我要问的)


非常感谢,我真的很欣赏这个网站一段时间了

这闻起来像是糟糕的应用程序设计。但要解决编译错误,只需执行以下操作:

@protocol SomeDelegate;

@interface FooThatUsesSomeDelegate : NSObject {
    id<SomeDelegate> delegate_;
}
@end
@protocol SomeDelegate;
@接口FooThatUsesSomeDelegate:NSObject{
身份证代表;
}
@结束
通过向前声明
SomeDelegate
,您不必在其完全声明的位置包含头文件。这对于两个类相互依赖的情况非常有用


您必须在实现源文件中包含头文件。但这通常不是问题。

注意它们可以是(作为St3fan)描述,但这正是为什么总是在不保留引用的情况下分配代理,因为否则每个代理都会阻止另一个代理被解除分配。

对于ARC,您现在为代理使用弱引用:

@property(weak)id<MyDelegateProtocol> *delegate;
@property(弱)id*委托;

当另一个视图控制器被取消分配时,引用变为零,您不需要手动跟踪其他对象的生命周期。

这太好了,谢谢。我将阅读转发声明。现在脱离主题,我不希望在我的应用程序设计中有任何详细的答案,但只是为了澄清我正在构建一个简单的游戏,主视图控制器er正在交换初始屏幕和标题屏幕,视图控制器C是游戏视图本身,游戏视图包含多个视图。因此视图控制器C游戏视图将包含一系列与主视图控制器无关的var和方法,如果可能的话,您能简单地提出一个更有效的模型吗?我认为它是w还不错,但我现在有点担心!我仍然需要了解如何使用委托,我非常理解这个理论,但我也意识到我并不需要这个解决方案,因为我可以在ViewController C中创建一个委托方法,返回到主ViewController来做我想做的事情。再次感谢,学到一些新东西仍然很好