将数据发送回主ViewController xcode

时间:2013-07-17 15:57:51

标签: xcode view uiviewcontroller

我正在尝试将名为“waitViewController”的第二个视图控制器中的数据发送回主ViewController。我使用的方法与我用来将数据从第一个发送到第二个的方法相反。问题是xcode不允许我在waitViewController.h中使用ViewController,而是希望我编写UIViewController。我该如何解决? 我想要的是: what i want it to be 它给我的错误: the errors its giving me

1 个答案:

答案 0 :(得分:1)

您可能需要使用'@class'代替'#import ViewController.h'

所以用以下代码替换import语句:

@class ViewController;

如果两个类的定义相互依赖,则需要这样做,因为您的两个视图控制器类似乎都是这样。

如果您最终使用@class,则必须在实现文件中导入“ViewController.h”。 @class防止无限循环(否则)相互依赖的类定义。据我了解,@ class表示“这个类”SomeClass“存在,所以不要担心它,即使我还没有导入它的接口。”

编辑:

顺便说一下,我觉得我应该提到@class是一个黑客,还有另一个更优雅的解决方案:一个(正式或非正式)协议。要使用正式协议:将协议定义放在'WaitViewController.h'的顶部:

@protocol WaitControllerDelegate
 -(void) useThisNewData: (NSWhateverDataType *) theData; 
- (void) useThisOtherData:(SomeOtherDataType) otherData;
@end

在WaitViewController界面中,不要将'turnData'定义为'ViewController *'类型。而是将其定义为“id”类型:

@property (nonatomic, assign) id <WaitControllerDelegate> turnDataDelegate;

(请注意,假设ViewController拥有对WaitViewController的'retain'引用并且您不希望两个对象具有强引用,他们会使用'assign'而不是'retain' - 它们将创建'保留循环',即互不允许彼此解除分配。) 在WaitViewController实现文件中,每当需要发回数据时,请调用

[turnDataDelegate useThisNewData: someData];

在ViewController.h中,宣布您正在采用'WaitControllerDelegate'协议:

@interface ViewController : UIViewController <WaitControllerDelegate> {

然后,在ViewController.m中实现'WaitControllerDelegate'方法,就像你可以使用任何其他方法一样,但是你不必在接口中声明它们:

- (void) useThisNewData: (NSWhateverDataType *) theData {
   ...do whatever you want
}

这种方法涉及更多的工作,但更好,因为它允许'WaitViewController'类更自包含,并且通常,理论上,使您的类更可重用。