我在我的程序中使用UINavigationController,当我位于导航堆栈中的第四或第五个控制器时,程序接收内存警告,我不能倒退。我按回按钮,导航栏动画正在进行,但控制器没有弹出,我仍然看到旧视图。任何人都可以帮我解决这个问题吗?
我的子视图有属性:
@property (nonatomic,retain) UITableView *searchTableView;
@property (nonatomic,retain) UISegmentedControl *categorySegmentedControl;
@property (nonatomic,retain) UISearchBar *searchTableBar;
@property (nonatomic,retain) UIView *footerView;
@property (nonatomic,retain) UINavigationItem *navigationItem;
我的viewDidUnload方法
- (void)viewDidUnload
{
[super viewDidUnload];
self.searchTableView = nil;
self.categorySegmentedControl = nil;
self.searchTableBar = nil;
self.navigationItem = nil;
self.footerView = nil;
}
我的dealloc
-(void)dealloc
{
[super dealloc];
[searchTableView release];
[categorySegmentedControl release];
[searchTableBar release];
[navigationItem release];
[footerView release];
[currentValues release];
}
我注意到了奇怪的规律性 - 只有当我从没有标签栏的视图移动到使用标签栏查看时,才会出现此错误。
答案 0 :(得分:1)
听起来你可能正在控制器的viewDidLoad中进行一些设置和/或在viewDidUnload中释放应该在initWithNibName中完成的东西:bundle和dealloc。
创建和销毁控制器时不会调用viewDidLoad和viewDidUnload,当创建和销毁控制器中的视图时会调用它们,这可能随时发生,尤其是在视图控制器收到内存警告时在后台(例如,不是导航控制器中的顶视图)。确保以这样的方式编写控制器:如果调用viewDidUnload,或者多次调用viewDidLoad,则不会丢失数据或破坏任何内容。
很抱歉,如果这个答案有点模糊,但是如果你发布视图控制器的代码,我可能会给你更具体的建议。