我的故事板中有一个视图,我通过执行以下操作添加到当前视图中:
MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"];
[self.view addSubview:mvc.view];
视图出现,但我看到的所有内容都会导致崩溃。我做错了什么?
这是一个崩溃的例子:
-(IBAction)showUsername:(id)sender{
[testLabel setText:@"username"];
}
所有内容也都附在故事板中,因此错误链接的连接不应该导致问题。
答案 0 :(得分:8)
您实例化一个新的视图控制器:
MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"];
但你不保留它。只要您将视图层次结构添加到另一个视图中,您的视图层次结构
[self.view addSubview:mvc.view];
因此,当单击某个按钮时,会向您发送一条消息IBAction
,但您的视图控制器已经被释放。为防止这种情况发生,请保留mvc
变量,例如属性中的某个位置。
@property(nonatomic, strong) MainViewController *controller;
self.controller = mvc;
答案 1 :(得分:0)
在你显示日志之前我能想到所有的理由......
答案 2 :(得分:0)
在产品>>编辑方案中启用NSZombie,您应该获得更具描述性的错误。然后你可以添加它。
答案 3 :(得分:0)
确保您的方法已正确声明并实施。还要确保你的.h中有IBOutlet UILabel * testLabel。我能想到的唯一另一个问题就是你如何把它连接起来。只按下按钮时它会崩溃吗?
答案 4 :(得分:0)
这一行是错误的,这就是你收到错误的原因。
MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"];
[self.view addSubview:mvc.view];
将其替换为
MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"];
[self presentModalViewController:mvc animated:YES];
在故事板中,您没有添加子视图,而是在执行模态的三件事之一,将其推送到导航控制器堆栈或自定义其中一个。