子视图中的IBAction错误

时间:2014-02-25 22:17:00

标签: ios objective-c

我有两节课:

  1. MeuPrimeiroViewController.h / .M
  2. MeuSegundoViewController.h / .M
  3. 我有这段代码:

    MeuPrimeiroViewController.h

    - (IBAction)botao:(id)sender;
    

    MeuPrimeiroViewController.m

    #import "MeuPrimeiroViewController.h"
    #import "MeuSegundoViewController.h"
        - (IBAction)botao:(id)sender{
            MeuSegundoViewController *segundo = [[MeuSegundoViewController alloc] init];
            UIWindow *window = [[UIApplication sharedApplication] keyWindow];
            UIView *view = segundo.view;
            [window addSubview:view]; 
        }
    

    这个命令效果很好,但是在'SegundoViewController'中我有这个代码:

    MeuSegundoViewController.h

    - (IBAction)botaoback:(id)sender;
    

    MeuSegundoViewController.m

     - (IBAction)botaoback:(id)sender{
            NSLog(@"Back messange");
        }
    

    但是控制台日志没有返回任何消息,模拟器将我返回到main.m文件,为什么?

1 个答案:

答案 0 :(得分:0)

当你这样做时:

[window addSubview:view];

属于MeuSegundoViewController的视图由其新的超级视图(窗口)保留,但视图控制器实例segundo不是 - 并且它被销毁。因此,当您按下按钮时会出现异常,因为无法调用segundo实例。

我怀疑你真的想要将视图添加为窗口的子视图。将它添加为MeuPrimeiroViewController视图的子视图,或者拥有导航控制器并将两个视图控制器都推入其中会更好。如果您使用导航控制器,那么它将保留视图控制器(并防止崩溃)。如果您使用MeuPrimeiroViewController,请致电:

[self addChildViewController:segundo];

如果你继续使用窗口,那么你需要一些东西来保留视图控制器(并没有明显的选择)。