【发布时间】:2017-08-14 07:31:22
【问题描述】:
我创建了简单的 UITableView,其中包含从 Firebase 加载的几行。 在 viewWillAppear 上,我连接观察者并用数据填充数组。 当视图已加载但仍未调用异步 Firebase 回调时会出现问题 - 表显示为空白。 回调后表格刷新,看起来像预期的那样,但延迟仍然很明显。 我已经配置了离线模式,并期望应该立即调用观察者的处理程序,但事实并非如此。
处理这个问题的正确方法是什么? 等待栏看起来不是最好的选择,因为它只有 100 毫秒左右,而且数据已经在设备上,而我只有 8 行。 有什么解决办法吗? 谢谢!
观察代码:
-(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; }
【问题讨论】:
-
你在 Storyboard 中分配了 dataSource 和 delegate 了吗?
-
并分享您的代码,以便我们查看并更好地了解您的情况。
-
感谢提问,我已经在viewDidLoad中分配了
-
@Dev_Tandel 我添加了 viewDidLoad 并观察代码示例
-
在主线程上重新加载。您还可以使用 ActivityIndicator 让用户感觉数据正在加载,因为有时您的互联网连接不佳也会导致延迟。
标签: ios uitableview firebase firebase-realtime-database