我的代码出了什么问题,没有调用数据源方法

时间:2016-06-29 01:42:21

标签: ios objective-c uitableview

我的代码是:

- (instancetype)init {
    self = [super initWithNibName:nil bundle:nil];
    if (self) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20)
                                                  style:UITableViewStylePlain];

        for (int i = 0; i < 10; i++) {
            [[LHItemSharedStore sharedStore] createItem];
        }
    }

    return self;
}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    return [self init];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView reloadData];

}
- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.view addSubview:self.tableView];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];

}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [[[LHItemSharedStore sharedStore] items]count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
    cell.textLabel.text = @"test";
    return cell;
}

如代码所示,不调用数据源方法。但是当我放 [self.view addSubView:self.tableView];

在viewWillAppear中,可以正确调用方法,当我将[self.view addSubView:self.tableView];更改为self.view = self.tableView;

时也可以使用

2 个答案:

答案 0 :(得分:1)

您的代码存在的问题是init可能会在viewDidLoad之后调用,因此在您设置代理时,您的表格视图仍为nil

答案 1 :(得分:0)

问题解决了! 似乎我在我的init方法中使用了self.view.fram,然后调用了loadview,然后调用viewDidLoad,在viewDidLoad中_tableView的init进程没有结束,所以_tableView是nil。如果我在viewDidLoad中设置self.view = self.tableView,它将被称为util self.tableView不是nil。 benifit我得到的是将view init放入viewDidLoad。

相关问题