Мое приложение имеет два состояния: вошел в систему и не вошел в систему, и у меня есть следующая архитектура (значительно упрощенная):
- ViewController A, который содержит поле поиска и табличное представление.
- ViewController B, которыйиспользуется для входа в приложение.
Поток следующий:
- пользователь не вошел в систему;
- A помещается в стек.В viewWillAppear
я проверяю, вошел ли пользователь в систему и, если да, выполняется асинхронный сетевой запрос, и, как только это будет сделано, таблица загружается данными из сети.Однако, поскольку пользователь не вошел в систему на этом этапе, табличное представление пусто;
- пользователь нажимает на поле поиска;поскольку он не вошел в систему, B нажимается (после подтверждения);
- он успешно входит в систему B, затем нажимает кнопку, которая выдает B и снова показывает A;
- в этот момент времени, потому что онвошел в систему, с 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];
}
}];
}
Iпроверил, что асинхронный запрос успешно завершен и что response
содержит правильные данные (это массив, используемый для поддержки UITableView
).
После reloadData
я установил точку останова в tableView:numberOfRowsInSection:
, и она останавливается там, и возвращает правильное количество элементов в array
.Однако после этого точка останова в tableView:cellForRowAtIndexPath:
никогда не будет достигнута.