UITableViewController не вызовет cellForRowAtIndexPath, но numberOfSectionsInTableView и numberOfRowsInSection действительно установлены правильно

#import "AssignmentsViewController.h" #import "Assignment.h" @interface AssignmentsViewController () @property NSMutableArray *assignments; @property (weak, nonatomic) IBOutlet UITableView *tableView; @end @implementation AssignmentsViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { NSLog(@"viewDidLoad"); [super viewDidLoad]; // Do any additional setup after loading the view. self.assignments = [[MySingleton sharedMySingleton] assignments]; self.tableView.delegate = self; self.tableView.dataSource = self; } - (void)viewWillAppear:(BOOL)animated { NSLog(@"viewWillAppear"); [self.tableView reloadData]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSLog(@"numberOfSectionsInTableView"); return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"numberOfRowsInSection"); return [self.assignments count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"cellForRowAtIndexPath"); UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AssignmentCell"]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AssignmentCell"]; } cell.textLabel.text = [[self.assignments objectAtIndex:indexPath.row] title]; return cell; } @end 

Консольный выход, когда загружается AssignmentsViewController и по крайней мере одно домашнее задание находится в массиве присвоений:

 2013-11-06 18:55:09.396 Homework Planner[4756:70b] viewDidLoad 2013-11-06 18:55:09.403 Homework Planner[4756:70b] numberOfSectionsInTableView 2013-11-06 18:55:09.405 Homework Planner[4756:70b] numberOfRowsInSection 2013-11-06 18:55:09.408 Homework Planner[4756:70b] viewWillAppear 2013-11-06 18:55:09.409 Homework Planner[4756:70b] numberOfSectionsInTableView 2013-11-06 18:55:09.409 Homework Planner[4756:70b] numberOfRowsInSection 

Я делаю приложение, которое отображает задания домашних заданий пользователей. По какой-то причине cellForRowAtIndexPath никогда не вызывается, даже когда я уверен, что в массиве присваивания есть объект задания homework. Назначения домашней работы добавляются в массив модальным представлением, и я убедился, что они действительно добавлены этим процессом, и после того, как пользователь отменил «отмену», представление возвращается к представлению, определенному этим классом. Когда это происходит, другие два метода, связанные с запуском UITableView, но не cellForRowAtIndexPath. Пожалуйста, помогите мне решить эту проблему, которую у меня есть.

4 Solutions collect form web for “UITableViewController не вызовет cellForRowAtIndexPath, но numberOfSectionsInTableView и numberOfRowsInSection действительно установлены правильно”

Проверьте, возвращается ли [self.assignments count] 0 (проверьте, нет ли self.assignments .

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"[self.assignments count] = %d", [self.assignments count]); } 

В противном случае единственной причиной, о которой я могу думать сейчас, является то, что высота, возвращаемая методом делегата, равна 0 (в случае, если вы ее реализуете, в противном случае реализация по умолчанию всегда дает ненулевую высоту, поэтому в этом случае нет проблемы).

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGFloat height = 0; // Some calculation to determine height of row/cell. return height; } 

Позвольте мне внести еще один преступник: «Проблема управления памятью».

Если объект DataSource TableView не поддерживается (сохранить значение равно нулю), в то время как TableView извлекает данные из него, то, superrisingly, tableView: cellForRowAtIndexPath: не вызывается, хотя numberOfSections и numberOfRows просто вызываются

Если cellForRowAtIndexPath не вызывается, это потому, что представление еще не отображается на экране (не показано), поэтому система не может знать размер ячейки или UITableView.

Чтобы решить эту проблему, убедитесь, что вы добавили свои элементы ПОСЛЕ просмотра, если визуализированы (и размеры известны). Это может произойти, если UITableView добавлен в родительском представлении для создания сложного экрана.

Если вы не загружаете данные во время фазы инициализации, вы можете вызвать reloadData после установки данных.

Пример:

 OfferTableViewController * offerList = [[OfferTableViewController alloc] init]; // add the view in the parent view to make sure that the dimension are calculated [fullSiteView.offersView addSubview: offerList.view]; offerList.delegate = self; // Set the data offerList.offers = product.offers; // Force reload to render [offerList.tableView reloadData]; 

Кроме того, если вы перезаписываете heightForRowAtIndexPath, убедитесь, что он возвращает что-то> 0

Обратите внимание, что даже если numberOfRowsInSection и numberOfSectionsInTableView возвращают правильное количество элементов, если размер таблицы неизвестен, система не будет звонить cellForRowAtIndexPath

Другая проблема может заключаться в том, что рамка самого представления таблицы имеет размер 0 или находится вне экрана …

Я застрял целую вечность, наблюдая за журналами numberOfRowsInSection: вызывается и heightForRowAtIndexPath: вызывается и возвращает твердое значение, но cellForRowAtIndexPath: никогда не вызывалось !

Попробуйте вывести кадр из таблицыView или установить цвет фона на нем, чтобы проверить его фактическую видимость на экране.

  • Невозможно выбрать Cell в UITableView для UITableViewCellAccessoryCheckmark
  • cellForRowAtIndexPath не вызывает при вращении устройства
  • Невозможно преобразовать значение типа «», чтобы ввести «Запись» в принуждение
  • Клавиатура TableView исчезает в прокрутке
  • Как пройти prepareForSegue: объект
  • uilongpressgesturerecognizer падает, даже если не реализован
  • Невозможно изменить кадр UILabel в UITableViewCell при первом появлении (используя Autolayout)
  • UITableView получает пробел сверху
  • UISearchDisplayController и повреждение прототипа UITableView
  • Радиус угла стола TableView отличается от iOS6
  • UITableView didSelectRowAt не называется iOS 10, но работает для 9.3.5
  • Interesting Posts

    Телефон: цифровая клавиатура для ввода текста

    Ячейка просмотра таблицы маскирует только после прокрутки, а затем назад

    Обнаружение жестких кранов в любом месте iPhone через акселерометр

    Как очистить предпочтение iOS push-уведомления для моего приложения?

    AVPlayerViewController выйдет из полноэкранного режима

    Должен быть доступ к CallHistory.storedata на jailbroken phone? Но неспособный

    UIStoryboard: Каков правильный способ получить активную раскадровку?

    изменить таблицу в режим редактирования и удалить строки внутри обычного ViewController

    Как я могу отказаться от вызова метода?

    Как эффективно приостановить игру в spritekit?

    Это цикл удержания?

    Создайте UIImage, создав UIWebView на фоновом потоке – iPhone

    core data – атрибут fetch, который соответствует одному из значений в массиве

    SMS Message Composer отображает отверстие вместо контактов

    Как создать и сохранить .rtf, .doc, .docx в Objective-C для iOS

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.