2013-03-11 93 views
2

我设置了窗口的父属性,当我检查windowDidLoad中的属性时,一切都很好。但是当我在IBAction中检查它时,它是零。我在这里错过了什么?物业IBAction失去价值

AppController.m

loginController = [[LoginController alloc] initWithWindowNibName:@"Login" owner:self]; 
loginController.parent = self; 
[[loginController window] makeKeyAndOrderFront:self]; 

LoginController.h

@property (nonatomic, weak) AppController *parent; 

LoginController.m @synthesize父母;

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 

    NSLog(@"Parent: %@", self.parent); //<--- Parent: <AppController: 0xblahblah> 
} 

- (IBAction)login:(id)sender 
{ 
    NSLog(@"Parent: %@", self.parent); //<--- nil 
} 

enter image description hereenter image description hereenter image description hereenter image description hereenter image description here

+1

如果loginController不是弱属性,那么存在一个保留周期,因为AppController持有一个强指向LoginController的指针,反之亦然。 – 2013-03-11 20:38:54

+0

@RamyAlZuhouri我把它当成了弱点,并将它切换到上面,看看它是否有所作为。 – Bot 2013-03-11 21:09:26

+0

你有没有注意到有什么区别? – 2013-03-11 21:28:43

回答

2

我认为你的问题只是你设置了错误的文件所有者,是拥有xib文件的登录控制器,因此它拥有所有的IBOutlets和IBActions绑定。

呼叫initWithWindowNibName:不是initWithWindowNibName:老板:,使文件所有者将是新创建的登录控制器,而不是应用程序控制器:

loginController = [[LoginController alloc] initWithWindowNibName:@"Login"]; 

编辑

就像我怀疑,你有两个单独的登录控制器实例,你认为只有一个。见XIB文件:

enter image description here

的厦门国际银行文件对象“登录控制器”,创建登录控制器的另一个实例。这与您在应用程序控制器中分配的实例不同。

的解决方案是让家长是一个IBOutlet:

@property (nonatomic, weak) IBOutlet AppController *parent; 

而对于不应用控制器分配它,它会自动从厦门国际银行文件加载。 您只需要将其绑定到xib文件中的登录控制器实例(如果文件所有者是应用程序控制器,则应该按住Ctrl键将父属性拖动到对象图标,告诉我如果遇到问题它)。所以这就是为什么它打印出null的原因:该动作由另一个对象处理,该对象没有初始化父属性。

+0

我掏出'owner:self',在'IBAction'中它仍然是'nil' – Bot 2013-03-11 21:42:45

+0

这个答案的后半部分是正确的。您正在创建两个LoginController实例:一个在笔尖中,另一个在应用程序控制器中。制作一个实例并与其他需要它的对象共享。 – paulmelnikow 2013-03-11 23:34:13

+0

这个案例问题的第一部分不适用。 – 2013-03-11 23:43:45

1

在viewDidLoad中访问伊娃叫parent。 登录:您访问财产self.parent。 这可以是相同的,也可以是不同的。

您是否@synthesize的财产?如果是这样,没有任何额外的选择?那你应该没问题。父母和self.parent应该是一样的东西。

您是否自动合成它?那没问题。但是相应的iVar被称为_parent。这意味着你必须有一个额外的伊娃parent这是不一样的伊娃。

将所有声明添加到您的问题以获取更多详细信息。

+0

我已经尝试了两个。不过,我上面有最新的编辑。 – Bot 2013-03-11 21:12:09