查询Firebase中的现有节点返回null

Ard*_*Dev 3 ios firebase

我的树结构在FireBase中看起来像

  • 图书
  • USERS
    • UserA_ID
    • UserB_ID
    • UserC_ID
      • 用户名:@""
      • USEREMAIL:@ ""
      • UserBookReadCount:@ ""

在我去更新'BookReadCount'之前,我尝试使用以下代码查询此用户是否存在.在里面

FQuery* query = [[userRef queryOrderedByKey] queryEqualToValue:userIDKey];
[query observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot)
            {
                NSLog(@"Snapshot value: %@", snapshot.value);
                if(snapshot.hasChildren)
                {
                   // UserX_ID exists. Use 'updateChildValues' to update the data
                }
                else
                {
                   // UserX_ID does NOT exist. Use 'setValue' to create the data
                }

            }];
Run Code Online (Sandbox Code Playgroud)

如果用户不存在,那么我使用'setValue'将新用户添加到此列表中.如果用户存在,那么我使用'updateChildValues'来更新用户数据.这一切都很好.

我面临的问题是查询.即使用户存在或不存在,上述查询也始终返回null.

对于我遗漏的明显事物的任何想法?

Jay*_*Jay 5

有几件事.要测试null,你应该真的

 if (snapshot.value == [NSNull null])
Run Code Online (Sandbox Code Playgroud)

这是一个略微修改的代码实现,包括NSNull检查.

Firebase *ref = [self.myRootRef childByAppendingPath:@"users"];

FQuery *query = [[ref queryOrderedByKey] queryEqualToValue:@"UserC_ID"];

    [query observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {

        if (snapshot.value == [NSNull null]) {
            NSLog(@"was null");
        } else {
            NSLog(@"key: %@    %@", snapshot.key, snapshot.value);
        }
    }];
Run Code Online (Sandbox Code Playgroud)

我设置了一个测试Firebase,其结构与您使用的相同,并且工作正常; 对于不存在的用户标识返回null,并返回节点UserC_ID.

所以也许你设置userIDKey的代码行为不端或者你的userRef可能不稳定.