删除[super loadView]时应用程序冻结

时间:2011-03-13 10:20:02

标签: iphone

当我删除[super loadView]时;视图不会显示。超类是UIViewController。

- (void)loadView 
{
    [super loadView];   

    UITableView *tableview = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 367.0f) style:UITableViewStylePlain];
    tableview.dataSource = self;
    tableview.delegate = self;
    self.tableView = tableview;
    [tableview release];

    [self.view addSubview:self.tableView];
}

知道为什么吗?提前谢谢!

4 个答案:

答案 0 :(得分:5)

1)UIViewController Class Reference, loadView section

  

此方法的自定义实现不应调用super。

2)你必须将view属性设置为某种东西。毕竟这个方法被称为loadView :)。而不是[self.view addSubview:self.tableView];尝试

self.view = tableView; 

答案 1 :(得分:2)

如果查看视图编程指南,它会提到如果覆盖[loadView],则应构建自己的视图。

默认的loadView会查看一堆东西,比如先从nib加载,然后构造普通视图。

因此,只需构建一个视图,并将其分配给self.view -

UIView * view = [[UIView alloc] initWithFrame ...]; self.view = view; [查看发布];

然后应该没问题。

编辑:代码示例:

- (void)loadView 
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 367.0f)];
    self.view = view;
    [view release];

    UITableView *tableview = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 367.0f) style:UITableViewStylePlain];
    tableview.dataSource = self;
    tableview.delegate = self;
    self.tableView = tableview;
    [tableview release];

    [self.view addSubview:self.tableView];
}

edit2:链接到viewcontroller编程指南: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101-SW1

查看自定义视图控制器部分,以编程方式创建视图,以及该文档中的其他几个位置。

答案 2 :(得分:0)

我想你想在addSubview之后移动那个[tableview发布]。

答案 3 :(得分:0)

这是因为您从未在代码中分配视图属性。当您在最后一行访问view属性时,会导致再次调用-loadView,这会导致无限循环。