我在导航堆栈中弹出项目时遇到了一些问题,并且不知道为什么它的行为类似。
Stack
A classA
B classB
C classC
D classD
在堆栈D,我创建另一个classD并将其添加到堆栈。
Stack
A classA
B classB
C classC
D classD
E classD
在我创建E并将其推入堆栈之前,我做一个pop来摆脱D以便堆栈成为
Stack
A classA
B classB
C classC
E classD
然而,当我弹出时,self.navigationController.viewcontrollers变为0并且我卡在C上,而E变得不可见。为什么pop会删除所有内容并转到C?
在didSelectRowAtIndexPath中的C中,我创建了一个ClassD并执行:
[self.navigationController pushViewController:ClassD animated:YES];
在didSelectRowAtIndexPath中的D,我创建另一个ClassD并执行:
[self.navigationController popViewControllerAnimated:NO]; //remove current and replace with new
[self.navigationController pushViewController:ClassD animated:YES];
但似乎并没有像预期的那样做。我觉得从流行到推动的过渡似乎太快没有出现?有任何想法吗?
答案 0 :(得分:0)
听起来popViewController
也将self.navigationController
设置为nil
。如果self.navigationController
为nil
,则[self.navigationController anyMethod]
不执行任何操作。
试试这个(未经测试):
UINavigationController *nav = self.navigationController;
[nav popViewControllerAnimated:NO]; //this pops myself
[nav pushViewController:anotherInstanceOfClassD animated:YES];
如果这个causes the problem that self is beeing destroyed然后在pop:
之前添加以下行[[self retain] autorelease]