iOS Firebase如何在块外部传递快照值/键
我对Firebase很陌生,但我开始喜欢它了。因此,我在将快照的值传递到块之外时遇到了问题 我想使用NSStrings和/或nsarray作为快照的值。这样我就可以在剩下的代码中使用它们 这是我的密码iOS Firebase如何在块外部传递快照值/键,ios,objective-c,firebase,Ios,Objective C,Firebase,我对Firebase很陌生,但我开始喜欢它了。因此,我在将快照的值传递到块之外时遇到了问题 我想使用NSStrings和/或nsarray作为快照的值。这样我就可以在剩下的代码中使用它们 这是我的密码 NSString *string1; NSArray *array1; Firebase *usersRef = [fb childByAppendingPath:@"Parent name"]; FQuery *statesRef = [usersRef queryOrderedByChild
NSString *string1;
NSArray *array1;
Firebase *usersRef = [fb childByAppendingPath:@"Parent name"];
FQuery *statesRef = [usersRef queryOrderedByChild:@"email"];
FQuery *specificStateRef = [statesRef queryEqualToValue:@"user name"];
[specificStateRef observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
//NSLog(@"snapshot: %@", snapshot);
NSLog(@" key: %@", snapshot.key);
NSLog(@" value: %@", snapshot.value);
//HELP ME HERE
array1=[[NSarray alloc]initwithObjects:snapshot.value];
string1=snapshot.key;
}];
如果我写的话,就在这个街区之外
NSLog(@" String1 = %@", string1);
NSLog(@" Array1 = %@", array1);
不幸的是,string1和array1的值都等于Nil。如何从Firebase获取值,然后在代码的其余部分使用它们。如何从块中获取这些值?谢谢大家现在有问题了: array1=[[NSarray alloc]initwithObjects:snapshot.value] 每次在块中运行数组时,您都在初始化它 修理很容易 块外部(可能定义为属性、全局变量或_块) 街区内
[myMutableArray addObject: snapshot.value];
您可能还忽略了一件事。childAdded事件会为每个子对象调用一次,然后再为其后的任何新子对象调用一次
因此,在这种情况下,如果父节点有三个子节点与查询匹配,那么块将被调用三次,这就是为什么我们在块中添加每个子节点
如果要同时读取所有结果,可以使用.value,然后对结果进行迭代
没有对错之分,这取决于你的用例。(.value可能读取数千个结果,这可能会成为内存问题。)
有关.childAdded和.value的详细信息,请参阅
哦,还有一张纸条。处理在块内检索到的块外数据可能很棘手,因为块需要时间才能完成。比如说,你今天上网很糟糕,速度很慢——块外的代码可能在块完成之前就执行了。因此,只有当您知道块已完成时,才对数据进行寻址。(例如,处理块内的数据,设置完成标志或其他机制。在某些情况下,值使这更容易)。嘿,谢谢。我在街区外工作很糟糕,但你推荐什么标志?因为在块外读取时,整数或字符串的值等于null。因此,如果在块内我将整数设置为1,那么在块外,整数的值将不等于1。那么你推荐什么样的标志机制呢?这很难,所以如果你没有答案,不用担心,我感谢你的帮助;定义块外的变量(如数组),然后在从Firebase返回数据时设置块内的值。比如说,;如果要将数组填充为tableView的数据源。定义块外的数组,按.value查询数据。然后对填充数组的快照(仍然在块中)进行迭代,然后在完成该迭代后刷新tableView。我不想要tableView。我真的需要弄清楚这一点。@user3352739提到tableView就是一个示例,说明了您可能希望在何处使用存储在数组中的数据。您的问题是关于用快照填充阵列的,答案演示了如何做到这一点。也许这不是你要问的?@user3352739也不清楚你将在哪里或如何处理块外的数据。例如你想读入一系列数字,然后把它们相加。您可以通过.value读取它们,迭代快照并将它们相加。这一切都可以在区块内完成。您还可以调用一个函数,从块内部将它们相加。也许进一步澄清这个问题将有助于我们帮助你们。
[myMutableArray addObject: snapshot.value];