Ich habe eine einfache UITableView mit mehreren Zeilen erstellt, die von Firebase geladen werden. In viewWillAppear verbinde ich Beobachter und bevölke das Array mit Daten. Das Problem tritt auf, wenn die Ansicht bereits geladen ist, aber der asynchrone Firebase-Rückruf noch nicht aufgerufen wurde - Tabelle wird als leer angezeigt. Die Tabelle wird nach dem Rückruf aktualisiert und sieht wie erwartet aus, aber die Verzögerung ist immer noch spürbar. Ich habe den Offline-Modus konfiguriert und erwarte, dass der Handler des Beobachters sofort aufgerufen wird, aber nicht.UITableView wird als leer angezeigt, bevor Daten aus Firebase geladen werden.
Was ist der richtige Weg, damit umzugehen? Warteraum sieht nicht wie die beste Option aus, weil es nur 100ms oder so ist und Daten sind bereits auf dem Gerät und ich habe nur 8 Zeilen. Gibt es eine Lösung? Vielen Dank!
Code Beachten Sie:
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
refHandle = [areasRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
[self.arrayOfAreas removeAllObjects];
for (FIRDataSnapshot* areaSnapshot in snapshot.children){
Area *area = [[Area alloc] init];
[area retrieveFromSnapshot:areaSnapshot];
[self.arrayOfAreas addObject:area];
} [self.tableView reloadData];
}]; }
viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
self.ref = [[FIRDatabase database] reference];
FIRUser *currentUser = [FIRAuth auth].currentUser;
areasRef = [[[_ref child:@"users"] child:currentUser.uid] child:@"areas"];
self.tableView.dataSource = self;
self.tableView.delegate = self;
self.tableView.tableFooterView = [[UIView alloc]init];
self.arrayOfAreas = [NSMutableArray new];
self.tableView.allowsMultipleSelectionDuringEditing = NO; }
haben Sie dataSource und Delegate im Storyboard zugewiesen? –
und teilen Sie Ihren Code, damit wir uns einen Überblick verschaffen und Ihre Situation besser verstehen können. –
Danke für die Frage, ich habe es in ViewDidLoad zugewiesen –