我有两节课:
我有这段代码:
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文件,为什么?
答案 0 :(得分:0)
当你这样做时:
[window addSubview:view];
属于MeuSegundoViewController
的视图由其新的超级视图(窗口)保留,但视图控制器实例segundo
不是 - 并且它被销毁。因此,当您按下按钮时会出现异常,因为无法调用segundo
实例。
我怀疑你真的想要将视图添加为窗口的子视图。将它添加为MeuPrimeiroViewController
视图的子视图,或者拥有导航控制器并将两个视图控制器都推入其中会更好。如果您使用导航控制器,那么它将保留视图控制器(并防止崩溃)。如果您使用MeuPrimeiroViewController
,请致电:
[self addChildViewController:segundo];
如果你继续使用窗口,那么你需要一些东西来保留视图控制器(并没有明显的选择)。