我有以下文件:
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
方法中手动绑定我的所有插座。这只是单调乏味和丑陋,因为它需要遍历所有视图的子视图并比较标识符。
答案 0 :(得分:0)
Apple已经确认(通过错误报告)这是一个已知问题,将在OS X 10.10.3中修复。