Ios Firebase无优先级自动订购?
我正在尝试使用优先级键排序数据。我将优先级仅放在“列表”中,如下所示 下面是与我的代码类似的示例Ios Firebase无优先级自动订购?,ios,objective-c,firebase,Ios,Objective C,Firebase,我正在尝试使用优先级键排序数据。我将优先级仅放在“列表”中,如下所示 下面是与我的代码类似的示例 [listRef observeEventType:FEventTypeChildAdded andPreviousSiblingNameWithBlock:^(FDataSnapshot *snapshot, NSString *prevName) { //get listID NSString* listID = snapshot.name; //get detail
[listRef observeEventType:FEventTypeChildAdded andPreviousSiblingNameWithBlock:^(FDataSnapshot *snapshot, NSString *prevName) {
//get listID
NSString* listID = snapshot.name;
//get detail for list
[[detailRef childByAppendingPath:listID] observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
NSString* text = snapshot.value[@"listtext"];
・
・
}];
}];
它工作正常。显示有序列表
然而,我有问题时,参考用户数据如下
[listRef observeEventType:FEventTypeChildAdded andPreviousSiblingNameWithBlock:^(FDataSnapshot *snapshot, NSString *prevName) {
//get listID
NSString* listID = snapshot.name;
//get detail for list
[[detailRef childByAppendingPath:listID] observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
NSString* text = snapshot.value[@"listtext"];
NSString* userID = snapshot.value[@"user"];
・
・
//added code
Firebase* userRef = [[self.firebase childByAppendingPath:@"person"] childByAppendingPath:userID];
[userRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
avatarImageURL = snapshot.value[@"image"];
username = snapshot.value[@"name"];
・
}];
}];
}];
此代码不返回按listRef优先级排序的数据。看起来像是userRef下的订单,但没有优先级
下面是json数据
"person" : {
"1321312" : {
"uid" : "1321312",
"name" : "testuser",
"image" : "http://test.png"
},
"3243121" : {
"uid" : "3243121",
"name" : "testuser2",
"image" : "http://test.png"
}
"list" : {
"-JOFBZ6YFFdRfBNEe-DV" : {
".value" : true,
".priority" :1.401504809514409E12
},
"-JOFJTOnwADzfZmY0fMl" : {
".value" : true,
".priority" : 1.401506883247231E12
},
我想按列表的优先级排序数据。我将“列表”和“人员”节点定义如下
[listRef setValue:@YES andPriority:ts];
[[[rootRef childByAppendingPath:@"person"] childByAppendingPath:userID] setValue:@{@"uid":userID, @"image":image, @"name":name}];
我不明白为什么数据是根据“个人”而不是“列表”优先级自动排序的
有人知道吗???数据是按字典顺序排列的。因此,用户的顺序与您在包含这些ID的数组上调用.sort()时的顺序相同。感谢您的回复。可以避免按字典顺序排列吗?使用.push()和Firebase提供的按时间顺序排列的ID,或者使用优先级指定不同的顺序。谢谢您,Kato。你能让我问一下吗?我试着在不改变代码的情况下再次测试了一段时间,我发现了一件事。当第一次加载数据时,数据是根据userID按字典顺序排列的,但在重新加载tableview数据后,它按照我所希望的时间顺序正确排列。尽管一次又一次地尝试加载,但第一次加载总是按字典顺序进行的。我不明白为什么只有第一次加载才是这样。如果你给我线索的话,我想可能没有必要改成按时间顺序排列的ID。很难说没有看到复制。可能您没有观察到,事件到达客户时出现了故障?不大可能发生的