1
MerenguesGeek 2015-12-11 20:10:33 +08:00
建议贴上代码看看, 可以试着设置 NSZombieEnabled 看看 log 信息。
|
2
pupboss 2015-12-11 20:19:14 +08:00
粗略理解你是在 B 控制器里面强行塞进去了 A 控制器的 view ,先不说 [self.view insertSubview: xxxx atIndex:xxx] 这个有没有在最顶层,在 B 里面 点击 button , B 里面没有对应的方法,当然 bad access 了
|
3
11 2015-12-11 20:23:18 +08:00
所以为什么你要在 B 里面 insert A 的 view 呢?
|
4
SeanChense 2015-12-11 20:23:43 +08:00
你说的获取到之前那一个 vc ,是 addChildrenController 这个 vc 然后又 insert view 么?
|
5
SeanChense 2015-12-11 20:24:54 +08:00
@pupboss B 中没有对应方法应该报: unrecognized selector
|
6
LINAICAI 2015-12-11 20:26:57 +08:00
要把一个控制的 view 作为子 view 添加到另一个控制器里面前提是要把这个控制器 addChildrenController 到父视图的控制器的。
|
7
pupboss 2015-12-11 20:27:17 +08:00
@SeanChense 好像还真是。代码绑定事件有一个 addTarget ,一般写 self ,不过如果他这种情况呢?如果绑定的不是当前控制器,是 bad access 还是 unrecognized selector
|
8
SeanChense 2015-12-11 20:32:33 +08:00
@pupboss 我刚才也想说是 self 的问题。
不过既然是 bad access 那就是强引用了一个被回收的内存, addTarget 之后 button 会对 self 强引用。总之感觉在系统看来,此 self 非彼 self 。我知识有限,无法解释出缘由。 |
9
66450146 2015-12-11 22:21:23 +08:00 1
这个不是很明显的问题吗
ViewController A --(strong reference)--> View A ViewController B --(strong reference)--> View B View A --(strong reference)--> View B App --(strong reference)--> ViewController A 但是没有任何 strong reference 指向 ViewController B ,它就被释放了 |
10
wohenyingyu01 OP @pupboss 有对应的方法,但是是空的,没有代码,确保不是代码造成的 bad access
|
11
wohenyingyu01 OP @11 只是想切换界面,不想用 tab , naviagtion 之类的比较明显的方式,因为是一个彩蛋……
|
12
wohenyingyu01 OP @SeanChense 并没有 addChildrenController ,而是直接 init 之后 insertSubView ,难道是这个原因
|
13
rim99 2015-12-14 11:19:22 +08:00 1
@wohenyingyu01 你应该看一下 container view 的文档: addChildrenController 之后,还要把子控制器的 View 添加到主控制器的子 view 里面,然后调用子 view ,让子控制器显示在需要的地方。
|
14
wohenyingyu01 OP @rim99 嗯嗯谢谢,确实是这个问题,因为如果只把 view insert 进去那 controller 就会被释放掉了
|
15
wohenyingyu01 OP @66450146 确实如此,新人这些概念还不是特别熟悉,谢谢
|