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 или установить цвет фона на нем, чтобы проверить его фактическую видимость на экране.

  • Все UITableCells исчезают при нажатии на UITableView в iOS 7
  • UITableView в UIScrollView - как сделать прокрутку вида, но не TableView сам по себе?
  • UITableView с изображениями прокручивается очень медленно
  • Как предотвратить исчезновение строки поиска при прокрутке? iOS Swift
  • cellForRowAtIndexPath не вызывается из пользовательского класса
  • Повторное использование UITableViewCell и изображений
  • Исходная ошибка Swifty JSON UITableView
  • Как удалить ячейку из статического UITableView, созданного в Storyboard
  • Добавить представление в виде таблицы (UITableViewController)
  • Ячейка UITableView Imageview меняет свой размер на клик?
  • Обновить стиль редактирования UITableViewCell в зависимости от содержимого
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.