Ответ 1
как вы перезагружаете таблицу?
делать [table relaodData];
вправо?
ваша таблица подключена к IBOutlet на вашем наконечнике?
в точке перезагрузки, инициализируется table
?
вы также можете опубликовать информацию об аварии.
У меня есть UITableView, который использует массив для отображения данных. Это прекрасно работает. У меня также есть UISearchBar для поиска в этой таблице. Когда данные сопоставляются в массиве tableviews, эти строки добавляются в другой изменяемый массив, а cellForRowAtIndexPath: вместо этого отображает данные из этого изменяемого массива.
Но numberOfRowsInSection: никогда не вызывается, когда я вызываю reloadData. Поэтому tableview падает при прокрутке, поскольку пытается получить данные из изменяемого массива, но для строк, которые находятся в исходном массиве (у которого больше элементов)
Я отлаживал довольно долгое время, но не могу ради любви найти причины этого. Datasource и Delegate подключены в представлении таблицы, поскольку он может отображать данные из исходного массива.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"isSearching: %d", isSearching);
// Return the number of rows in the section.
if(!isSearching)
return [originalArray count];
NSLog(@"isSearching - Return searchCopyListOfItems");
return [searchCopyListOfItems count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if(!searching)
cell.textLabel.text = [originalArray objectAtIndex:indexPath.row];
else
cell.textLabel.text = [searchCopyListOfItems objectAtIndex:indexPath.row];
return cell;
}
как вы перезагружаете таблицу?
делать [table relaodData];
вправо?
ваша таблица подключена к IBOutlet на вашем наконечнике?
в точке перезагрузки, инициализируется table
?
вы также можете опубликовать информацию об аварии.
Обязательно не вызывать reloadData
из любого из методов делегата представления таблицы. Это приведет к непредсказуемому поведению. Кроме того, убедитесь, что вы ранее не вызывали beginUpdates
, и вы вызываете только ваш метод reloadData
из основного потока.
если numberOfSections
возвращает 0
, numberOfRowsInSection
не будет вызываться.
У меня была такая же проблема сегодня с XCode 6.1
В моем коде у меня были настройки dataSource
и delegate
:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tableView.dataSource = self;
self.tableView.delegate = self;
}
... и, как ни странно, мой код заполнил бы таблицу при первой загрузке... но затем проигнорировал любые вызовы reloadData
.
В раскадровке, когда я щелкнул правой кнопкой мыши по представлению таблицы в раскадровке, переключатель "outlet" был пустым.
Я перетащил строку из этого пустого круга в родительский UIView
, а затем reloadData
работал нормально.
Как-то я потерял связь IBOutlet
между моим элементом управления UITableView и файлами .h/.m, которые были использованы для его заполнения.
Также убедитесь, что вы не перемещаете таблицу в процессе перезагрузки данных, потому что она может вызвать cellForRowAtIndexPath:
пока вы все еще обновляете свои данные.
Проблема для меня заключалась в том, что вырезанное количество разделов возвратило 0, и хотя я не планировал использовать разделы, должно быть 1, как это выше в иерархии объектов, чем строки: fooobar.com/questions/531743/...
Для меня было получено, что я пытался увеличить значение и вернуть его из numberOfSectionsInTableView
то есть. return someValue++
По-видимому, это невозможно, и в моем случае он не увеличивал someValue
от 0 до 1 и поэтому возвращал 0 разделов, поэтому не было причин для вызова numberOfRowsInSection:
!
Решением для меня было то, что я скопировал его из другого пера и забыл перемонтировать dataSource
и delegate
выходы в IB. Это уже случалось со мной раньше, но я решил опубликовать это здесь на случай, если это решение поможет тем, кто сталкивается с этой проблемой.
Попробуйте
[self.tableView reloadData];