不调用cellForRowAtIndexPath

时间:2016-07-25 06:18:20

标签: ios objective-c

我有一个名为BNRItemViewcontroller

的viewcontroller

在实施中:

- (instancetype)init{
    self = [super initWithStyle:UITableViewStylePlain];
    if (self) {
        for (int i = 0; i < 5; i++) {
            [[BNRItemStore sharedStore]createItem];
        }
    }
    return self;
}

- (instancetype)initWithStyle:(UITableViewStyle)style{
    return [self init];
}

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

我在 cellForRowAtIndexPath:方法中添加了一个断点,但它没有进入该方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
    NSArray *items = [[BNRItemStore sharedStore] allItems];
    BNRItem *item = items[indexPath.row];
    cell.textLabel.text = [item description];
    return cell;
}

7 个答案:

答案 0 :(得分:2)

Try this in cellForRowAtIndexPath to fix the crash issue and also check that the delegate properly set or not

static NSString *CellIdentifier = @"yourCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

谢谢

答案 1 :(得分:0)

请检查您是否已正确连接&#34;数据源&#34;和#34;代表&#34;通过代码或故事板,查看控制器的表视图。

答案 2 :(得分:0)

确保.horizontal { display: flex; justify-content: center; } .vertical { display: flex; flex-direction: column; justify-content: center; } 不返回0;

numberOfRowsInSection

修改

- (instancetype)init{ self = [super initWithStyle:UITableViewStylePlain]; if (self) { self.tableView.dataSource = self; self.tableView.delegate = self; for (int i = 0; i < 5; i++) { [[BNRItemStore sharedStore]createItem]; } } return self; } 方法中写下这一行。

init

答案 3 :(得分:0)

请确保您已按照以下步骤操作:

第1步:符合UITableViewDataSourceDelegateUITableViewDelegate

第2步:设置self.tableView.delegate = selfself.tableView.datasource = self

答案 4 :(得分:0)

请确认

  1. BNRItemViewcontroller中添加协议,如下所示:@interface BNRItemViewcontroller() <UITableViewDelegate,UITableViewDataSource>

  2. 如果您使用Storyboard或xib,则应确认dataSource&amp;委托Storyboard / xib的出口或写self.tableview.dataSource = self&amp;而是self.tableview.delegate = self

答案 5 :(得分:0)

有两种方式

1.请检查您是否已正确连接&#34;数据源&#34;和#34;代表&#34; tableview的 2. self.tableView.delegate = self&amp; self.tableView.datasource = self

答案 6 :(得分:0)

There can be seven reasons:

Like in accepted answer

  1. Controller needs to conform to UITableViewDataSourceDelegate and UITableViewDelegate

  2. You must assign delegates self.tableView.delegate = self and self.tableView.datasource = self

Futhermore:

  1. numberOfSectionsInTableView must return number > 0 (1 if you want to have one main section)

  2. numberOfRowsInSection must return number > 0

  3. UITableView needs different frame than CGRectZero. You should't create UITableView in that way: self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

  4. heightForRowAtIndexPath must return number > 0

  5. Some other controller (in inheritance) can take delegate methods. Only if you have one tableView for more than one controller.