Intereting Posts
Нечувствительный к регистру пароль Как уведомить пользователей о запросах на звонки в приложении iOS? Как прикрепить кнопку, которая обычно находится под UIWebView над клавиатурой, когда она открывается? Панель вкладок не отображается с помощью UITabBarController Как отличить загруженную песню от загруженной песни от Apple Music на iOS 11? Контроллер навигации из Storyboard наследует от корневого контроллера (iOS11) Как нарисовать текст в контексте OpenGL ES в iOS? iOS – UIView Всегда на фронте без BringSubviewToFront В строке состояния вызова накладывается отображение контроллера представления Swift: сокращенный способ перемещения строк JSON в массив Кнопка, заполняющая представление стека Подождите, пока метод делегата, выполняющийся в ios Анимированные глюки UIView Как найти код блока iOS 9.0 – Удалите верхнюю панель из листа действий UIAlertController

Как я могу изменить numberOfRowsInSection, когда у меня есть несколько TableViews?

Это мой текущий код:

if (tableView == nearbyTV) { return numberOfObjects; } else { if (tableView == self.searchDisplayController.searchResultsTableView) { return [searchResults count]; } else { return [users count]; } } 

Как вы можете видеть, я пытаюсь отразить разные индексы в зависимости от вида таблицы или просмотра табличного представления. Второй контроллер отображается, когда пользователь нажимает кнопку. На данный момент, если индекс второго табличного представления превышает индекс первого табличного представления, он выходит из строя, к сожалению, знакомым:

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]' 

Что я могу сделать, чтобы обновить количество строк для второй таблицы? Также я понимаю, как получать информацию из другого табличного представления, когда я прокручиваю. Очень расстраивает. Любая помощь вообще была бы очень оценена. Благодарю.

РЕДАКТИРОВАТЬ:

cellForRowAtIndexPath:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == friendsTV || tableView == self.searchDisplayController.searchResultsTableView) { static NSString *simpleTableIdentifier = @"SimpleTableCell"; SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; }else{ cell.propic.image=nil; cell.flashBack.backgroundColor=[UIColor whiteColor]; [cell.button1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } if (tableView == self.searchDisplayController.searchResultsTableView) { cell.fullName.text = [searchResults objectAtIndex:indexPath.row]; } return cell; }else{ static NSString *simpleTableIdentifier = @"nearbyTableCell"; nearbyTableCell *cell = (nearbyTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"nearbyTableCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; }else{ cell.propic.image=nil; cell.flashBack.backgroundColor=[UIColor whiteColor]; [cell.button2 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } // NSLog(@"%@",[searchResults objectAtIndex:indexPath.row]); if (tableView == self.searchDisplayController.searchResultsTableView) { cell.fullName.text = [searchResults objectAtIndex:indexPath.row]; }else if (tableView==nearbyTV){ NSString *requestCombine = [NSString stringWithFormat:@"/%@",[[json objectAtIndex:indexPath.row] objectForKey:@"fbID"]]; [FBRequestConnection startWithGraphPath:requestCombine parameters:nil HTTPMethod:@"GET" completionHandler:^( FBRequestConnection *connection, id result, NSError *error ) { cell.fullName.text=[result objectForKey:@"name"]; }]; cell.fbIDLabel.text = [[json objectAtIndex:indexPath.row] objectForKey:@"fbID"]; } return cell; } } 

Проблема заключается не в использовании нескольких UITableView в одном классе.

Из журнала ошибок:

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]' 

Понятно, что при создании ячеек в методе cellForRowAtIndexPath вы пытаетесь получить доступ к объекту с индексом 13, а длина вашего массива – 13, т. cellForRowAtIndexPath Последний индекс – 12. Поэтому попробуйте отладить ваш массив и проверить механизм доступа к объектам из массивов при создании клетки. Может быть, вы возвращаете дополнительный счет в numberOfRowsInSection для своего nearbyTV .

РЕДАКТИРОВАТЬ 1: всегда полезно установить Exception Breakpoint в ваших проектах, поскольку он указывает точное местоположение кода сбоя. Установите точку останова исключения для отслеживания массива, при котором произошел сбой при доступе к элементу для отслеживания реальной проблемы.

EDIT 2: Как видно из метода cellForRowAtIndexPath , searchResults и json – это два массива, из которых вы собираете объекты, которые будут отображаться на ячейках. Счетчик строк, возвращаемый из numberOfRowsInSection должен соответствовать количеству объектов в searchResults и json массивах, чтобы заставить ваш код работать правильно. Проблема заключается в одном из этих массивов. Отладка, чтобы увидеть количество объектов, присутствующих в searchResults и json массивов, и количество строк, возвращаемое методом numberOfRowsInSection .

Попробуйте этот код, я надеюсь, что он может сработать для вас.

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if ([tableView isEqual:nearbyTV]) { return [Your nearbyTVarray's count]; } elseIf ([tableView isEqual:nearbyTV]) { return [searchResults count]; } return [users count]; } 

Проверьте, что возвращается таблица,

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ { if(tableView == firstTableView){ return 10; } return 15; } 

Он возвращает первые ячейки tableView 10 и другие таблицы 15 ячеек. измените условие else с тем, сколько у вас таблицы.

попробуй это

 (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if ([tableView isEqual:firstTableVIew]) { return [array1 count]; } elseIf ([tableView isEqual:secondTableView]) { return [array2 count]; } } 

и обязательно добавьте проверку того if([tableView isEqual:yourTableVIew] в cellForRowAtIndexPath также

Также предполагая, если каждому представлению таблицы назначен свой раздел:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case 0: return [array1 count]; break; case 1: return [array2 count]; break; default: // Handle others break; } }