У меня есть сценарий, когда моя перезагрузка таблицы не работает. Пожалуйста, дайте мне знать, правильно ли я смоделировал свой дизайн или мне нужно его изменить.Tableview Reload не работает для родительского сценария VC/Child VC
- У меня ядро контроллер представления, и каждая вкладка контроллер представления штриха-наследуются из этого основного контроллера представления
- Каждые из контроллера НаПредставлениевкладки бара имеет TableView и реализует протокол UITableViewDelegate и UITableViewDataSource.
- Если приложение запущено в первый раз, в представлении диспетчера viewDidLoad контроллера ядра, у меня есть метод для извлечения данных из Интернета. В методе viewDidLoad контроллера child view у меня есть метод, который заполняет источник данных для tableview.
- Итак, проблема заключается в первом запуске, данные извлекаются и сохраняются успешно в данных Core, но не перезагружают таблицу, поэтому ее пустые.
Так что в настоящее время в соответствии с приведенным ниже кодом, при первом запуске я вижу вид предупреждения, а затем вид загрузки, и я вижу, что данные сохраняются в Core Data. Но таблица таблицы таблиц первой таблицы загружается пустым, без данных, и причина в том, что [перезагрузка не вызывается]. Но при следующем запуске данные есть.
Ниже приведен код
ядро View Controller
- (void)viewDidLoad
{
[super viewDidLoad];
if (!self.myManagedObjectContext) {
//Get Shared Instance of managedObjectContext
self.myManagedObjectContext = [LTDataModel sharedInstance].mainObjectContext;
//Check if managed object context has required data
......
if (<data not found> {
[self fetchDataIntoContext];
}
}
-(void)fetchDataIntoContext {
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Initializing..."
message:@"This is your first launch of App"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
UIView *loadingView = [[UILoadingView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:loadingView];
dispatch_queue_t fetchEventQ = dispatch_queue_create("Fetcher", NULL);
dispatch_async(fetchEventQ, ^{
<add data to core data>
[[LTDataModel sharedInstance] save];
dispatch_async(dispatch_get_main_queue(), ^{
[[self.view.subviews lastObject] removeFromSuperview];
});
});
}
Детский View Controller
--(void)setMyArrayOfEvents:(NSMutableArray *)myArrayOfEvents {
if (_arrayOfMyEvents != arrayOfMyEvents) {
_arrayOfMyEvents = arrayOfMyEvents;
[self.eventTableView reloadData];
}
}
-(void) viewDidLoad {
[super viewDidLoad];
//Get Shared Instance of managedObjectContext if it does not exist
if (!self.myManagedObjectContext) {
self.myManagedObjectContext = [LTDataModel sharedInstance].mainObjectContext;
}
//Populate the array which feeds the tableview
[self populateTableViewArrayFromContext];
}
-(void)populateTableViewArrayFromContext
{
<Fetch data dfrom Core Data ......>
self.myArrayOfEvents = [[NSMutableArray alloc] initWithArray:localArray];
}