Iphone 将一个类的对象声明为另一个类

Iphone 将一个类的对象声明为另一个类,iphone,objective-c,Iphone,Objective C,我有一个名为Building的班级: @interface Building : NSObject @property (nonatomic,retain)NSString* node; @property (nonatomic,retain)NSString* subnode; @property (nonatomic,retain)NSString* supernode; @property (nonatomic,retain)Node *reference; @end 我有另一个类,名为

我有一个名为Building的班级:

@interface Building : NSObject
@property (nonatomic,retain)NSString* node;
@property (nonatomic,retain)NSString* subnode;
@property (nonatomic,retain)NSString* supernode;
@property (nonatomic,retain)Node *reference;
@end
我有另一个类,名为Node

@property (nonatomic,retain)NSMutableArray* strArray;
@property (nonatomic,retain)NSString * strName;
我声明了三级建筑的实例。我使用建筑的引用设置了三级建筑的strName:

   building.reference.strName=strVal;

但是这给了我空值。如何使用Building类的引用来设置此值。

请确保在
Building
-init
方法中初始化
引用。例如(假设
节点
也直接继承自
NSObject
):

此外,您可以编写指定的初始化器方法,以便在初始化时传入现有节点,例如
-initWithNode:(Node)myNode
。然后,您可以让您的
构建
-init
方法调用
[self initWithNode:[[Node alloc]init]

然后,要初始化
建筑
对象,可以调用
[[Building alloc]init]
(以获取具有空白节点的建筑)或
[[Building alloc]initWithNode:myNodeObject]
(以获取具有已实例化节点的建筑)

请注意,如果节点不直接从NSObject继承(它在自己的
init
中不做任何事情),那么您也应该调用超类
init
例程,这样您的初始化器将变成:

- (id) init {
    if(self = [super init]) {
        self.reference = [[Node alloc] init];
    }
    return self;
}

您是否确实创建了一个
构建
实例,然后将其
引用
设置为您同样创建的
节点
?另外,您是否确定strVal不为null?
- (id) init {
    if(self = [super init]) {
        self.reference = [[Node alloc] init];
    }
    return self;
}