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。很难说没有看到复制。可能您没有观察到,事件到达客户时出现了故障?不大可能发生的