我将loadView
中创建的所有子视图设置为viewDidUnload
中的nil。
我在模拟器中模拟内存警告,我的屏幕外视图及其子视图通过viewDidUnload
删除。但是,当这些屏幕外视图进入视图时再次调用loadView
时,我的子视图第二次无法正确重新创建。例如,我在loadView
创建的标签和表格视图为空:
CGRect frame = CGRectMake(0, 0, 400, 600);
UIView *theView = [[UIView alloc] initWithFrame:frame];
self.view = theView;
[theView release];
int w = frame.size.width;
int h = frame.size.height;
CGRect tblFrame = CGRectMake(0, h/10, w, h*7/10);
UITableView *tblvw = [[UITableView alloc] initWithFrame:tblFrame style:UITableViewStylePlain];
tblvw.delegate = self;
tblvw.dataSource = self;
self.resourcesTblVw = tblvw;
[tblvw release];
[self.view addSubview:resourcesTblVw];
CGRect lblFrame = CGRectMake(0, 0, w, 36);
UILabel *lbl = [[UILabel alloc] initWithFrame:lblFrame];
lbl.font = [UIFont boldSystemFontOfSize:20];
lbl.backgroundColor = [UIColor colorWithWhite:0.7 alpha:1.0];
lbl.text = name;
self.nameLabel = lbl;
[lbl release];
[self.view addSubview:nameLabel];
想法?
答案 0 :(得分:1)
首先猜测会发生这种情况,因为第二次,在viewdidload中执行加载数据的代码在loadview方法中不存在。所以将代码从你加载数据的地方复制到表中,依此类推到loadView方法......
你可以做的另一件事......首选的选择是创建一个方法,如
示例:
-(void)loadData {
//enter code here to load all the tables and so on.
}
然后在视图加载时调用此方法...应该可以工作并在loadView方法中调用此方法....这样一旦在内存警告之后再次设置视图,所有内容都会被加载。
<强> PK 强>