内存警告后,loadView无法正确加载我的视图

时间:2010-06-19 13:33:09

标签: iphone uiviewcontroller

我将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];

想法?

1 个答案:

答案 0 :(得分:1)

首先猜测会发生这种情况,因为第二次,在viewdidload中执行加载数据的代码在loadview方法中不存在。所以将代码从你加载数据的地方复制到表中,依此类推到loadView方法......

你可以做的另一件事......首选的选择是创建一个方法,如

示例:

-(void)loadData {
//enter code here to load all the tables and so on.

}

然后在视图加载时调用此方法...应该可以工作并在loadView方法中调用此方法....这样一旦在内存警告之后再次设置视图,所有内容都会被加载。

<强> PK