当出口绑定时,NSViewController不会dealloc

时间:2015-03-09 22:42:59

标签: automatic-ref-counting iboutlet nsviewcontroller nsstoryboard

我有以下文件:

Main.storyboard

这与创建具有一些新增项目的新项目时创建的默认故事板相同:视图中有一个按钮连接到视图控制器的button插座({{1的实例视图控制器上的ViewController操作。

ViewController.m

doTheThing:

Another.storyboard

包含单个场景(视图控制器+视图)的简单故事板,该场景设置为初始控制器并且是#import "ViewController.h" @interface ViewController () @property (weak) IBOutlet NSButton *button; @property (weak) NSViewController *controller; @end @implementation ViewController - (IBAction)doTheThing:(id)sender { if (self.controller) { NSLog(@"Removing %@", self.controller); [self.controller.view removeFromSuperview]; [self.controller removeFromParentViewController]; } else { self.controller = [[NSStoryboard storyboardWithName:@"Another" bundle:[NSBundle mainBundle]] instantiateInitialController]; [self addChildViewController:self.controller]; [self.view addSubview:self.controller.view]; NSLog(@"Adding %@", self.controller); } } @end 的实例。视图中的标签未连接到任何插座

AnotherViewController.m

AnotherViewController

当我运行应用程序并单击按钮时,它会添加#import "AnotherViewController.h" @interface AnotherViewController () @property (weak) IBOutlet NSTextField *label; @end @implementation AnotherViewController - (void)dealloc { NSLog(@"Deallocing AnotherViewController %@", self); } @end 的视图控制器和视图,当我再次单击该按钮时,它们将被删除,并且Another.storyboard的实例将被取消分配。 / p>

但是,如果我将AnotherViewController中的标签连接到Another.storyboard上的label插座,则不会发生重新分配。为什么这样做以及我该怎么做才能解决它?

编辑:我确实有一些解决方法,但它们不是很理想,我更愿意理解为什么推荐的方式(故事板和插座)无法正常工作。

不需要的解决方法1:执行相同操作但从XIB文件加载视图控制器和视图。这可以按预期工作,但理想情况下我可以使用故事板做同样的事情。

不需要的解决方法2:在视图控制器的AnotherViewController方法中手动绑定我的所有插座。这只是单调乏味和丑陋,因为它需要遍历所有视图的子视图并比较标识符。

1 个答案:

答案 0 :(得分:0)

Apple已经确认(通过错误报告)这是一个已知问题,将在OS X 10.10.3中修复。