在另一个类中设置对象?

问题描述:

我有一类,“DogViewController”,在这里我声明属性和合成它:在另一个类中设置对象?

@property (nonatomic, assign) NSInteger myInt; 

@synthesize myInt; 

我有另一个类,"CatViewController",其中我想设置的敏可变的,所以这是我做过什么:

@property (nonatomic, retain) DogViewController *myDogViewController; 

@synthesize myDogViewController; 

myDogViewController.myInt = 5; 

然后,我想从DogViewController类,这是我做的访问敏:

someVar = self.myInt; 

someVar应b该命令之后的e == 5。

有没有原因,为什么不行?

+0

您是否在myDogViewController.myInt = 5时实例化了'myDogViewController'? –

+0

@property命令是否实例化它? – Andrew

+0

@property指令只是指示Objective-C预编译器准备在实现文件中创建getter和setter。 @synthesize关键字然后使预编译器注入实际的getter/setter代码(除非手动覆盖这些方法)。如果您的属性需要初始化,您需要单独执行(例如,在构造函数中)。 – Perception

您必须先实例化DogViewController。因此,在CatViewController:

DogViewController *dogViewController = [[DogViewController alloc] [email protected]"DogViewController" bundle:nil]; 
dogViewController.myInt = 5; 
// If you are using a navigation controller push DogViewController like this: 
[self.navigationController pushViewController:dogViewController animated:YES]; 
[dogViewController release]; 

如果你不使用导航控制器,只显示你想要

+0

你能否编辑你的答案以反映OP可能没有使用视图控制器的事实? – Perception

+0

当然 - 但这不是讨论VC的问题吗? – darksky

+0

根据OP今天在SO上的其他问题,这些不是VC的。Ofc,他在这个问题中从来没有说过他们 - 总是可以安全地采取最低的共同标准。 – Perception

任何方式,我想你不会得到值为5,因为它将被重置了这一观点。

你可以像下面这样做。

你的 “CatViewController” 中,创建一个像 “的setParent”

拿在.h文件中变量的一种方法:

ID父母;

功能.m文件:在CatViewController.m文件

-(void)setParent:(id)pidParent{ 
parent = pidParent; 
} 

进口 “DogViewController.h”。

当您推送到DogViewController时,也称为它的setParent方法。

Like [objDogViewController setParent:self];

那么你可以通过使用“父”变量来设置值。

干杯。

+1

这不是他的问题的原因。他的例子中的DogViewController永远不会被初始化,这就是为什么他无法访问它的任何属性。 – Perception

尝试使用不使用retain而使用基本数据类型使用assign

@property (nonatomic, assign) NSInteger myInt;