Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 连接firebase请求_Swift_Firebase - Fatal编程技术网

Swift 连接firebase请求

Swift 连接firebase请求,swift,firebase,Swift,Firebase,我在firebase中观察到一个子值,在收到一个子值后,我需要在第一个请求中的另一个ref中查找其他属性 这是firebase结构: { "chats" : { "11-126" : { "-LJZTRGt4lqMFjfgQqH0" : { "attachmentType" : 6, "body" : "kdnfif", "date" : 1533915284798, "delivered" : fa

我在firebase中观察到一个子值,在收到一个子值后,我需要在第一个请求中的另一个ref中查找其他属性

这是firebase结构:

    {
  "chats" : {
    "11-126" : {
      "-LJZTRGt4lqMFjfgQqH0" : {
        "attachmentType" : 6,
        "body" : "kdnfif",
        "date" : 1533915284798,
        "delivered" : false,
        "id" : "-LJZTRGt4lqMFjfgQqH0",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "11",
        "selected" : false,
        "senderId" : "126",
        "senderName" : "Porter Project",
        "sent" : true,
        "valid" : true
      }
    },
    "121-123" : {
      "-LK7DHLChxxqKLvn4dRa" : {
        "attachmentType" : 6,
        "body" : "Hola",
        "date" : 1534515029389,
        "delivered" : true,
        "id" : "-LK7DHLChxxqKLvn4dRa",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "123",
        "selected" : false,
        "senderId" : "121",
        "senderName" : "Yoel",
        "sent" : true,
        "valid" : true
      },
      "-LK7ELGPbdext9hyliAh" : {
        "attachment" : {
          "bytesCount" : 51302,
          "loaded" : true,
          "managed" : false,
          "name" : "IMG-20180816-WA0002.jpeg",
          "url" : "https://firebasestorage.googleapis.com/v0/b/roomatch-209023.appspot.com/o/RooMatch%2FImage%2FIMG-20180816-WA0002.jpeg?alt=media&token=3baa3bdd-4280-4e6f-b190-bddd4fcffc17",
          "valid" : true
        },
        "attachmentType" : 2,
        "date" : 1534515306654,
        "delivered" : false,
        "id" : "-LK7ELGPbdext9hyliAh",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "121",
        "selected" : false,
        "senderId" : "123",
        "senderName" : "Chab1",
        "sent" : true,
        "valid" : true
      },
      "-LK8z6O3HFp9ckfwaqnD" : {
        "attachmentType" : 6,
        "body" : "Un texto",
        "date" : 1534544606647,
        "delivered" : true,
        "id" : "-LK8z6O3HFp9ckfwaqnD",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "123",
        "selected" : false,
        "senderId" : "121",
        "senderName" : "Yoel",
        "sent" : true,
        "valid" : true
      },
      "-LKFHdpEFat-eX7xAQdu" : {
        "attachmentType" : 6,
        "body" : "recibido texto",
        "date" : 1534650391854,
        "delivered" : false,
        "id" : "-LKFHdpEFat-eX7xAQdu",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "121",
        "selected" : false,
        "senderId" : "123",
        "senderName" : "Chab1",
        "sent" : true,
        "valid" : true
      },
      "-LKRy6pZwjNnvJwx43Bn" : {
        "attachmentType" : 6,
        "body" : "jjj",
        "date" : 1534863113383,
        "delivered" : false,
        "id" : "-LKRy6pZwjNnvJwx43Bn",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "121",
        "selected" : false,
        "senderId" : "123",
        "senderName" : "Chab1",
        "sent" : true,
        "valid" : true
      },
      "-LKRze2KNk8xdgsdmq-B" : {
        "attachmentType" : 6,
        "body" : "gfx",
        "date" : 1534863515671,
        "delivered" : false,
        "id" : "-LKRze2KNk8xdgsdmq-B",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "121",
        "selected" : false,
        "senderId" : "123",
        "senderName" : "Chab1",
        "sent" : true,
        "valid" : true
      },
      "-LKRzmsc5vPBxeJdneNQ" : {
        "attachment" : {
          "bytesCount" : 51125,
          "loaded" : true,
          "managed" : false,
          "name" : "IMG-20180816-WA0000.jpeg",
          "url" : "https://firebasestorage.googleapis.com/v0/b/roomatch-209023.appspot.com/o/RooMatch%2FImage%2FIMG-20180816-WA0000.jpeg?alt=media&token=688f8d78-5419-4986-8b21-1e030a0b9da4",
          "valid" : true
        },
        "attachmentType" : 2,
        "date" : 1534863551851,
        "delivered" : false,
        "id" : "-LKRzmsc5vPBxeJdneNQ",
        "loaded" : true,
        "managed" : false,
        "recipientId" : "121",
        "selected" : false,
        "senderId" : "123",
        "senderName" : "Chab1",
        "sent" : true,
        "valid" : true
      }
    }},
  "users" : {
    "121" : {
      "id" : "121",
      "image" : "",
      "loaded" : true,
      "managed" : false,
      "name" : "Yoel",
      "nameToDisplay" : "Yoel Jimenez",
      "online" : true,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    },
    "122" : {
      "id" : "122",
      "image" : "https://lh6.googleusercontent.com/-RX7ka61PxvY/AAAAAAAAAAI/AAAAAAAAADw/8d1DyKgF4y4/photo.jpg?sz=50",
      "loaded" : true,
      "managed" : false,
      "name" : "QtJambiii",
      "nameToDisplay" : "QtJambiii",
      "online" : false,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    },
    "123" : {
      "id" : "123",
      "image" : "http://www.freecashrewards.co/roomatch/api/photo/HO8rxjXhMHConKe2BG3GItNoHDZ6ENs9LqJHlZRj.jpeg",
      "loaded" : true,
      "managed" : false,
      "name" : "Chab1",
      "nameToDisplay" : "Chab1",
      "online" : false,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    },
    "124" : {
      "id" : "124",
      "image" : "",
      "loaded" : true,
      "managed" : false,
      "name" : "Leo",
      "nameToDisplay" : "Leo",
      "online" : false,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    },
    "125" : {
      "id" : "125",
      "image" : "https://lh4.googleusercontent.com/-9Mi0fhtOqMQ/AAAAAAAAAAI/AAAAAAAAAAA/AAnnY7pGdlGynOdTmxd6p3MflUn0BXjjww/mo/photo.jpg?sz=50",
      "loaded" : true,
      "managed" : false,
      "name" : "Oscar",
      "nameToDisplay" : "Oscar",
      "online" : false,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    },
    "131" : {
      "id" : "131",
      "image" : "",
      "loaded" : true,
      "managed" : false,
      "name" : "Marta",
      "nameToDisplay" : "Optional(\"Marta\") Optional(\"gr\")",
      "online" : true,
      "selected" : false,
      "status" : "Added!",
      "typing" : false,
      "valid" : true
    }
  }
}
我正在阅读chats all children,如果child id有一些我需要的字符串,我将提取该child的值,该child有一个值recipientId,它是users child中的用户id。我需要检索id等于recipientID的子级的用户值。我尝试了不同的方法,但都返回零

以下是我尝试的代码:

chatsRef.observe(.childAdded, with: { [weak self] snapshot in
            if snapshot.key.contains(String(requestManager.instance.user.id!)){
                if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
                    for snap in snapshot{
                        if let data = snap.value as? [String: Any]{
                            let id = data["id"] as! String

                            let message = data["body"] as? String
                            let senderId = data["senderId"] as! String
                            let recipientId = data["recipientId"] as! String
                            var name: String?
                            var preurl = ""
                            print("the recipient id \(recipientId)")
//                          Constants.refs.databaseUser.child(recipientId).observeSingleEvent(of: .value, with: {snap in
//                              print(snap.value as Any)
//                                  let da = snap.value as! [String: Any]
//                                      name = da["name"] as! String
//                                      preurl = da["name"] as! String
//                          })


                            var url = ""
//                          Constants.refs.databaseUser.child(recipientId).child("name").observe(.value, with: { snap1 in
//                              print("")
//                              name = snap1.value as? String
//                          })
//                          Constants.refs.databaseUser.child(recipientId).child("image").observe(.value, with: { snap2 in
//                              preurl = snap2.value as! String
//                          })
                            if senderId == String(requestManager.instance.user.id!){
                                url = Router.baseURLString + (requestManager.instance.user.image?.path.replacingOccurrences(of: "images", with: "/photo"))!
                            }else{
                                //url = self?.rootRef.child("users").child(recipientId).value(forKey: "image") as! String
//                              self?.rootRef.child("users").child(recipientId).child("name").observe(.value, with: { snap in
//                                  url = snap.value as! String
//                              })
                                url = preurl
                            }
代码以附加到coreData的更多内容结束,但这不是问题所在。问题是,所有的注释代码none works都返回nil作为name值,而image的get为空字符串“”。我正在找回id为121-123的聊天孩子。某个孩子的收件人id等于123。所以我在观察用户child 12。但总是零。这种行为是因为它是异步的,并且在请求完成之前传递了代码,或者是因为我在读取错误的子用户。 PD:因为康斯坦特夫是这样的

struct Constants
{
    struct refs
    {
        static let databaseRoot = Database.database().reference()
        static let databaseChats = databaseRoot.child("chats")
        static let databaseUser = databaseRoot.child("users")
    }
}

看看代码,如果我读对了,就会发现您迭代了聊天中的每个子节点。然后测试每个读入节点,以查看刚刚读入的快照的键是否与特定的user.id匹配。如果这就是目的,那么就不需要了。如果你知道一条特定的路径,那么就阅读它。i、 e.如果你知道你正在寻找聊天/uid_5,那么只需在中阅读该节点即可。键在节点中是唯一的,因此在聊天中只有一个/chats/uid_5。问题是聊天中没有插入用户数据。问题是,我必须在获取用户数据后执行所有流程,因为firebase中的异步。为了清楚起见,我在子节点中搜索key containin一些值,如果该值匹配,那么我需要在user中搜索特定的子值。用户和子节点是兄弟。您不能直接在Firebase中执行部分字符串搜索,因此无法在子节点中搜索某些值中的关键字。我认为可能有更好的方法来解决这个问题。不清楚为什么不在聊天中存储用户数据(如UID),以便知道是谁发送了聊天信息。还不清楚asych导致了什么问题,因为您已经将数据写入Firebase,所以只需将其取出即可。也许你可以澄清你想做什么以及具体的问题是什么。问题是聊天时使用userid userid作为键,然后使用recipientId和senderId等字段。使用发送id,我需要查询用户并请求recipientId值以获取名称和图像url。如果我完成了所有的消息在值内追加。我得到了我所需要的所有数据,但如果没有得到null o“”,你是说chats有userid userid作为键,这意味着/chats节点中的子键是userid userid?那么“11-126”是一个userid userid?如果是,那是什么类型的用户ID?另外,我看到这些节点的子节点有一个键,然后是一个不必要的重复的子“id”。换句话说,您不需要与节点的键匹配的子id,因为该键始终可以从snapshot.key中检索。