2014-11-12 5 views
1

Я не знаю, сколько UITableViews я сделал в своей жизни. Сотни. Но это мой первый с нуля на iOS8, и все, кажется, изменилось.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", и клетку с надписью "уг" и "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:), но тогда я получаю то же самое crash ищет heightForFooterInSection :, а затем, если я реализую это, я получаю тот же самый крах, который ищет tableView:indentationLevelForRowAtIndexPath:.

Я НИКОГДА не должен был явно реализовывать все это раньше. Что тут происходит? Я предполагаю, что это связано с новым бизнесом, который занимается автоассоциацией, но это далеко не «авто».

EDIT: Затем я пошел и реализовал tableView:indentationLevelForRowAtIndexPath:, и он умер с той же ошибкой, которая пыталась запустить tableView:heightForRowAtIndexPath:! Который я думал, был весь смысл использования автосекретаря ячейки, чтобы начать с! Я думаю, что есть что-то фундаментальное, я недоразумение.

ответ

0

Вы уверены, что подключили self.tableView с реальной одной таблицей из .xib? Я добавил только это вам код, и он отлично работает для меня (IOS 8.1):

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

enter image description here

Смежные вопросы