感谢您的帮助,像往常一样,我正在寻找更多信息......
关于视图控制器,我正在尝试开发具有多个视图的应用程序。
View Controller使用presentModalViewController从View A加载 - 并从那里加载View B - 也工作正常,但我有一些唠叨的问题......
View A中有一个表格,向下钻到View B,然后我可以回到查看一个usig dismissModalViewController,但是一旦回到View A,我就无法访问View A中的表格。
按下视图B时,视图A中的控件/变量会发生什么?调用视图B时调用的dealloc是什么?如果我希望在View B被关闭并且View A重新进入视图时访问控件/变量,我需要做什么?
是否有一些文章可以对此进行教育? 非常感谢您的帮助
重新迭代
我很确定还有很多其他成员处于这种情况
这是我的代码,一点一滴
startPage - (这是应用程序的主页),带有一个开始按钮,包含
View Controller -> View
点击开始按钮,加载一个名为ViewA的Viewcontroller(View Controller - > View),代码如下
UIViewController *viewA= [[viewA alloc] initWithNibName:@"viewA" bundle:nil];
viewA.modalTransitionStyle=UIModalTransitionStyleCoverVertical;
[naviControl presentModalViewController:viewA animated:YES];
[viewA release];
在ViewA中选择一个表行时,将使用以下代码调用另一个viewcontroller ViewB(View Controller - > View)
UIViewController *viewB= [[viewB alloc] initWithNibName:@"viewB" bundle:nil];
viewB=UIModalTransitionStyleCoverVertical;
[self viewB animated:YES];
ViewB被解雇,VIewA显示代码
[self dismissModalViewControllerAnimated:YES];
此时,对于某些NSLog,当ViewB被关闭时,在ViewA上只调用viewWillAppear,而不是viewDidLoad,如果我尝试在ViewA中的表上重新加载数据,则应用程序会因EXC_BAD_ACCESS而崩溃
由于 Veeru
答案 0 :(得分:0)
当您将ViewController(VC)B作为模式从VC A呈现时,它不应该释放任何VC A变量(除非可能发送内存警告)。如果要在解除B时重新加载驻留在VC A中的表数据,则可以使用[UITableView reloadData]。您应该从viewDidAppear方法中调用它,因为只要视图返回到屏幕上,就会调用此方法。希望这有帮助!
ps ..用适当的表替换UITableView以重新加载。
答案 1 :(得分:0)
首先,请更正以下声明:
UIViewController *viewA= [[viewA alloc] initWithNibName:@"viewA" bundle:nil];
到
UIViewController *viewA= [[UIViewController alloc] initWithNibName:@"viewA" bundle:nil];
其次,您需要了解内存管理和视图控制器的流程,例如:
解决方案:
如果您尝试在应用程序中使用多个导航屏幕,则应该只使用UINavigationController的pushViewController方法,该方法会保留viewcontroller的实例,直到您明确释放它们为止。
还要注意使用本地实例或对象实例及其保留计数,跟踪分配和释放,即保留计数,除非您需要,否则不应为0.
希望这会有所帮助......