为什么我的UITableView从UITableViewStyleGrouped变为UITableViewStylePlain

时间:2010-04-14 16:54:40

标签: iphone objective-c

我的应用程序有一个扩展UITableViewController的视图控制器。初始化方法如下所示:

- (id)initWithCoder:(NSCoder*)coder {
    if (self = [super initWithCoder:coder]) {
        self.tableView = [[UITableView alloc] initWithFrame:self.tableView.frame 
                                                      style:UITableViewStyleGrouped];
    }

    return self;
}

最初加载视图时,它显示为UITableViewStyleGrouped。但是,如果我的应用收到内存不足警告,则上述视图会更改为UITableViewStylePlain。视图/控制器没有关联的xib文件。 viewDidUnload和didReceiveMemoryWarning方法很简单:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

我的问题是,当我收到内存警告时,为什么表格样式会改变?

它发生在设备和模拟器上。该设备是运行OS 3.1.3的3G iphone,模拟器运行OS 3.1

1 个答案:

答案 0 :(得分:4)

在初始化过程中,您拨打[super initWithCoder:coder]。覆盖UITableViewController的指定初始值设定项可能会更好,这是-initWithStyle:。可能发生的情况是,当您通过调用[super init…]创建表视图控制器时,它的创建时已经设置了tableView属性;也就是说,它在初始化时创建表视图。这就是为什么您对self.tableView.frame的调用有效 - 如果self.tableView的值为nil则不应该有效。这是一个更好的实现:

- (id)initWithCoder:(NSCoder*)coder {
    if (self = [super initWithStyle:UITableViewStyleGrouped]) {

    }

    return self;
}