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?
答案 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。