多个部分崩溃的iOS8表视图 - 与自动调整有关吗?

时间:2014-11-12 13:25:54

标签: uitableview ios8

我不知道我生命中有多少UITableViews。数百人。但这是我在iOS8上从头开始的第一个,事情似乎发生了变化。

我使用虚拟数据构建我的视图层,而我根本无法创建多节表。它崩溃了,我将在下面显示错误。

在StoreListController.m中:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    self.tableView.estimatedRowHeight = 44.0;
    self.tableView.rowHeight = UITableViewAutomaticDimension;


    self.title = @"Stores";

    self.customers = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
    self.stores = [NSArray arrayWithObjects:@"Ooga", @"Booga", nil];

}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return [self.customers count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [self.stores count] ;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [self.customers objectAtIndex:section];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"getting myself a cell");
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    cell.textLabel.text = [self.stores objectAtIndex:indexPath.row];

    return cell;
}

如果我从1返回tableView:numberOfSectionsInTableView:,则会很高兴地向我显示标有" One"的标题,以及标有" Ooga"和#34; Booga"。

但是,如果我返回实际商店数组中的标题数量,我会得到:

2014-11-12 07:50:57.234 Stanley-FIL[82428:12358084] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0281b946 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x024a4a97 objc_exception_throw + 44
    2   CoreFoundation                      0x026febd2 -[__NSArrayI objectAtIndex:] + 210
    3   UIKit                               0x018e9bfc -[UITableViewDataSource tableView:heightForHeaderInSection:] + 50
    4   UIKit                               0x01631139 -[UITableViewController tableView:heightForHeaderInSection:] + 61
    5   UIKit                               0x013f8449 -[UITableView _delegateWantsHeaderForSection:] + 370
    6   UIKit                               0x015b7935 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 169
...

我已经尝试覆盖它在这里调用的UITableViewDelegate方法(tableView:heightForHeaderInSection:),但是我遇到了同样的崩溃,寻找的是heightForFooterInSection:然后如果我实现了这个,我会遇到同样的崩溃为tableView:indentationLevelForRowAtIndexPath:

我从来没有必须明确地实施所有这些东西。这里发生了什么?我认为它与新的细胞自动调节业务有关,但这远远不是" auto" ....

编辑:然后我继续执行tableView:indentationLevelForRowAtIndexPath:并且因为尝试运行tableView:heightForRowAtIndexPath:时遇到了同样的错误!我认为这是开始使用表格单元格自动调整的重点!我认为,存在一些我误解的根本原因。

1 个答案:

答案 0 :(得分:0)

您确定将self.tableView与.xib中真正的一个表相关联吗? 我只在你的代码中添加了这个,它对我来说很完美(iOS 8.1):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44.0;
}

enter image description here