У моего приложения два состояния: авторизовано и не авторизовано, и у меня следующая архитектура (значительно упрощенная):
- ViewController A, который содержит поле поиска и табличное представление.
- ViewController B, который используется для входа в приложение.
Поток следующий:
- пользователь не вошел в систему;
- A помещается в стек. В viewWillAppear
я проверяю, вошел ли пользователь в систему, и если да, выполняется асинхронный сетевой запрос, и, как только это будет сделано, таблица загружается данными из сети. Однако, поскольку пользователь еще не вошел в систему, табличное представление пусто:
- пользователь нажимает на поле поиска; поскольку он не вошел в систему, B нажимается (после подтверждения);
- он успешно входит в систему B, затем нажимает кнопку, которая выскакивает B и снова показывает A;
{{1} } - в этот момент, поскольку он вошел в систему, из viewWillAppear
я выполняю асинхронный запрос;
- когда это завершается, я вызываю reloadData
в виде таблицы.
Я заметил, что вызывается numberOfRowsInSection:
и возвращает правильный результат, однако cellForRowAtIndexPath:
после этого НЕ вызывается, и таблица остается пустой.
Я проверил, и reloadData
вызывается в основном потоке.
Есть идеи, что это может быть? Потому что это сводит меня с ума!
Спасибо,
S.
РЕДАКТИРОВАТЬ: Вот асинхронный бит кода из viewWillAppear
в A.
if ([User isLoggedIn]) {
[self.asyncRequest fetchDataWithCompletionHandler:^(id response, NSError *error) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (error) {
[Utils displayError:error];
} else {
self.array = response;
self.isLoaded = YES;
[self.tableView reloadData];
[self.tableView setContentOffset:CGPointMake(0.0f, 0.0f) animated:NO];
}
}];
}
Я проверил, что асинхронный запрос завершается успешно и что ответ
содержит правильные данные (это - это массив, используемый для поддержки UITableView
).
После reloadData
я поставил точку останова в tableView: numberOfRowsInSection:
, и он останавливается на этом и возвращает правильное количество элементов в массиве
. Однако после этого точка останова в tableView: cellForRowAtIndexPath:
никогда не достигается.
Это, возможно, слишком очевидное, но в моем случае, я удалял элемент (Маркировка), которая была ссылкой на верхнее поле моей таблицы программно, таким образом, это не была проблема с делегатом/источником, но таблицы, имеющей некоторые проблемы с довольным размером / высота, этот конфликт, создало странное поведение, звоня numberOfRowsInSection, но не cellForRowAt indexPath