从Storyboard实例化ViewController时崩溃

时间:2012-02-05 16:23:33

标签: iphone objective-c storyboard

我的故事板中有一个视图,我通过执行以下操作添加到当前视图中:

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"];
             [self.view addSubview:mvc.view];

storyboard

视图出现,但我看到的所有内容都会导致崩溃。我做错了什么?

这是一个崩溃的例子:

-(IBAction)showUsername:(id)sender{

    [testLabel setText:@"username"];

}

所有内容也都附在故事板中,因此错误链接的连接不应该导致问题。

5 个答案:

答案 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)

enter image description here

在你显示日志之前我能想到所有的理由......

答案 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];

在故事板中,您没有添加子视图,而是在执行模态的三件事之一,将其推送到导航控制器堆栈或自定义其中一个。