我有两个类(Test1
和Test2
),每个类都有一个属性(分别为test2
和test1
)指向另一个类的实例。这意味着Test1.m
必须导入Test2.h
,而Test2.m
必须导入Test1.h
。 .h文件还必须具有前向声明。不幸的是,这意味着我无法使用点表示法访问test2
和test1
的属性。我可以通过消息传递访问它们,但我应该能够使用任何一种表示法。我该如何解决这个问题?
相关
测试1
//Test1.h
@class Test2;
@interface Test1 : NSObject {
Test2* test2;
int a1;
}
@property (nonatomic, retain) Test2* test2;
- (void)meth1;
@end
//Test1.m
#import "Test1.h"
#import "Test2.h"
@implementation Test1
@synthesize test2;
- (void)meth1{
test2.a2;//Request for member 'a2' in something not a structure or union
}
@end
的Test2
//Test2.h
#import <Foundation/Foundation.h>
@class Test1;
@interface Test2 : NSObject {
Test1 *test1;
int a2;
}
@property (nonatomic, assign) Test1* test1;
- (void)meth2;
@end
//Test2.m
#import "Test2.h"
#import "Test1.h"
@implementation Test2
@synthesize test1;
- (void)meth2{
test1.a1;//Request for member 'a1' in something not a structure or union
}
@end
答案 0 :(得分:3)
添加和合成a1&amp;的属性a2似乎有所帮助。
答案 1 :(得分:2)
如果你想在他们所属的课程之外访问a1和a2,我强烈建议将它们定义为属性。
但是,如果确实想要避免传递邮件,您可以在标题中将它们定义为公开:
@interface Test2 : NSObject {
Test1 *test1;
@public
int a2;
}
并像这样访问它们:
- (void)meth1{
test2->a2;
}