0

所以我有一个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];

有用!只要我添加了这一行,事件就会被传递给它自己的控制器并停止崩溃。

4

4 回答 4

2

我建议您使用以下代码

ViewControllerA.h

    #import "ViewControllerB.h"

ViewControllerA.m(您要推送新控制器的位置)

ViewControllerB *newController = [[ViewControllerB alloc]init];
[self presentModalViewController:newController animated:YES];

ViewControllerB.m你将需要

[self.presentingViewController dismissModalViewControllerAnimated:YES];

让它再次消失。

关于一个打开屏幕的多个控制器(Apple ViewController Programming Guide):

Each custom view controller object you create is responsible for managing exactly 
one screen’s worth of content. The one-to-one correspondence between a view controller 
and a screen is a very important consideration in the design of your application. 
You should not use multiple custom view controllers to manage different portions 
of the same screen. Similarly, you should not use a single custom view controller 
object to manage multiple screens worth of content.
于 2012-04-06T16:26:12.243 回答
2

你应该尽量避免嵌套 UIViewControllers 的做法。虽然它在 iOS5 中得到技术支持,但出于多种原因,包括您遇到的问题类型(您有一个指向 UIViewController 的悬空指针,这就是您崩溃的原因),但这是不明智的。

http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

于 2012-04-06T17:35:36.897 回答
1

尽管这个问题非常模糊,但我想您没有保留对视图控制器 B 的引用,因此当视图 B 尝试与其交互时,它会导致 EXC_BAD_ACCESS。

于 2012-04-06T16:17:09.693 回答
0

设置为滑块目标的对象是什么?如果它是EXC_BAD_ADDRESS,那么您可能不会保留目标,很可能是滑块的视图控制器。

于 2012-04-06T16:17:51.143 回答