正确的方法将数据传回Objective-c

时间:2014-06-03 13:16:34

标签: ios objective-c

VC1.h

#import "VC2.h"

@interface VC1 : UIViewController

@property(nonatomic, strong)NSString *vc1String;

@end

VC1.m

VC2 *vc2Obj = [[VC2 alloc]init];
    vc2Obj.vc2String = @"Hello from VC1";

VC1将值传递给VC2。


VC2.h

#import "VC1.h"

@interface VC2 : UIViewController

@property(nonatomic, strong)NSString *vc2String;

@property(nonatomic, weak)VC1 *vc1Obj;

@end

尝试将数据传回VC1,但@property(nonatomic, weak)VC1 *vc1Obj;给出错误unknown type name VC1 did you mean VC2

我了解代表但是想知道这种方法有什么问题以及为什么它不能识别VC1?

3 个答案:

答案 0 :(得分:4)

正如kernix所说,在VC2.h中,你应该使用@class VC1,而不是#import "VC1.h"

原因是因为两个#import语句创建了循环定义。在VC1.h中,您说:“要定义VC1,您需要先定义VC2。”但是在VC2.h中,您要说:“要定义VC2,您需要先定义VC1。”编译器不能首先定义这两个类。

解决这个问题的方法是将声明一个类与定义一个类分开。声明@class VC1;说:“嘿,我要定义一个名为VC1的类;我现在没有这样做,但我保证在所有链接和运行之前的某个时间进行。”现在编译器知道你说VC1时的意思。

请注意,在VC2.m中仍然需要#import "VC1.h",否则编译器将无法找到编译VC2所需的定义。

答案 1 :(得分:0)

而不是#import“VC1.h”使用@class VC1;

答案 2 :(得分:0)

VC1.h

#import "VC2.h"

@interface VC1 : UIViewController

@property(nonatomic, strong)NSString *vc1String;

@end

VC2.h

@class VC1;

@interface VC2 : UIViewController

@property(nonatomic, strong)NSString *vc2String;

@property(nonatomic, weak)VC1 *vc1Obj;

@end

要在VC2中访问VC1的方法,您需要在VC2.m文件中导入VC1.h。