所以我有一个viewControllerA,我想向它添加另一个由viewControllerB管理的视图。在viewControllerB中,只有一个UISlider可以激活一个简单的操作。如果我不接触这个UISlider,它不会崩溃,一旦我使用UISlider,它就会崩溃。我正在使用ARC。我正在使用:
[self.view addSubView: viewControllerB.view];将viewControllerB添加到viewControllerA。我是不是遗漏了什么?谢谢。
好的。这看起来是一个非常简单的情况。我刚刚添加了一个视图控制器和一个操作。以下是github上的演示项目代码:https://github.com/randomor/Demo
我希望这样做的原因是因为我有另一个应用程序可以在现场创建一个视图控制器,并将其添加到另一个视图中。我不想以模态的方式来做这件事,因为我不想让新的视图控制器覆盖整个屏幕。谢谢。
解决方案:所以我现在只使用最新的ViewController容器API:
[self addChildViewController:viewControllerB];它起作用了!只要我添加了这一行,事件就会被传递给它自己的控制器,它就会停止崩溃。
发布于 2012-04-07 00:26:12
我建议您使用以下代码
在ViewControllerA.h中
#import "ViewControllerB.h"在ViewControllerA.m中(要推送新控制器的位置)
ViewControllerB *newController = [[ViewControllerB alloc]init];
[self presentModalViewController:newController animated:YES];在ViewControllerB.m中,您需要
[self.presentingViewController dismissModalViewControllerAnimated:YES];让它再次消失。
关于一个开放屏幕的多个控制器(苹果ViewController编程指南):
您创建的每个自定义视图控制器对象都负责管理一个屏幕的内容。在设计应用程序时,视图控制器和屏幕之间的一对一对应是一个非常重要的考虑因素。您不应该使用多个自定义视图控制器来管理同一屏幕的不同部分。类似地,您不应该使用单个自定义视图控制器对象来管理多个屏幕上的内容。
发布于 2012-04-07 01:35:37
您应该尝试并避免嵌套UIViewControllers的做法。虽然iOS5在技术上支持它,但由于许多原因,它是不明智的,包括您遇到的问题类型(您有一个指向UIViewController的悬空指针,这就是您崩溃的原因)。
http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
发布于 2012-04-07 00:17:10
尽管这个问题非常模糊,但我想您并没有保留对视图控制器B的引用,因此当视图B试图与其交互时,它会导致EXC_BAD_ACCESS。
https://stackoverflow.com/questions/10046048
复制相似问题