繁体   English   中英

Firebase查询返回空值

[英]Firebase Query Return Null

您好,我正在尝试通过特定节点下的类别字段查询我的Firebase数据库中的数据

以下是数据库的摘要,使我刚才所说的内容更易于理解

 "events" : {
    "CCDS" : {
      "attend:count" : 2,
      "event:category" : "Seize The Day",
      "event:city" : "San Francisco",
      "event:date" : {
        "end:date" : "08/09/2017",
        "end:time" : "7:00 PM",
        "start:date" : "08/09/2017",
        "start:time" : "5:00 PM"
      },
      "event:description" : "Happy hour is more joyful in the summer thanks to Center City District Sips, which offers discounted drinks and appetizers every Wednesday evening.  Catch up with old friends and make a few new ones as Center City’s best bars and restaurants host the summer’s happiest hour every Wednesday from 5-7 p.m.  Enjoy $5 cocktails, $4 wine, $3 beers and half-price appetizers at dozens and dozens of bars and restaurants.",
      "event:imageURL" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_flyers%2FCCDS-compressor.jpg?alt=media&token=bcce3968-1cca-4890-a3d0-d8064bd0d1da",
      "event:name" : "center city district sips",
      "event:promo" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_promo_vid%2FMIA%2FBudweiser%20Made%20In%20America%20Festival%202013%20August%2031%20-%20September%201.mp4?alt=media&token=9b4b9d4f-2d6d-4762-a5fd-c72edb943ac4",
      "event:state" : "PA",
      "event:street:address" : "660 Chestnut St",
      "event:zip" : 19130
    },
    "DD" : {
      "attend:count" : 2,
      "event:category" : "I Love College",
      "event:city" : "New York",
      "event:date" : {
        "end:date" : "08/26/2017",
        "end:time" : "5:00 PM",
        "start:date" : "08/26/2017",
        "start:time" : "1:00 PM"
      },
      "event:description" : "Help us celebrate the hard work and creativity of the students and demo the iOS apps and games they've built in only 8 weeks! Developers, entrepreneurs, friends, and industry professionals are all welcome to attend",
      "event:imageURL" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_flyers%2Fmakeschooldemo-compressor.jpg?alt=media&token=1e75d18d-1949-48e8-a208-2ca88cde395b",
      "event:name" : "demo day",
      "event:promo" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_promo_vid%2FDD%2FDemo%20Night%202017%20-%20Make%20School%20Product%20College.mp4?alt=media&token=d9adb4b1-5689-4b15-96b2-e18138701526",
      "event:state" : "PA",
      "event:street:address" : "394 Broadway",
      "event:zip" : 10013
    },
    "MIA" : {
      "attend:count" : 23,
      "event:category" : "Seize The Night",
      "event:city" : "San Francisco",
      "event:date" : {
        "end:date" : "09/03/2017",
        "end:time" : "7:00 PM",
        "start:date" : "09/02/2017",
        "start:time" : "12:00 PM"
      },
      "event:description" : "Budweiser Made in America Festival is an annual music festival held in Philadelphia and formerly simultaneously held in Los Angeles.Sponsored by Anheuser–Busch and produced by Live Nation, the event features several stages that continuously host live music from a wide range of genres including hip hop, rock, pop, R&B, and EDM.",
      "event:imageURL" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_flyers%2FMadeInAmerica-compressor.jpg?alt=media&token=1ac6e794-6a1f-4f8a-bdb0-afc91f8ba6ae",
      "event:name" : "made in america",
      "event:promo" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_promo_vid%2FMIA%2FBudweiser%20Made%20In%20America%20Festival%202013%20August%2031%20-%20September%201.mp4?alt=media&token=11e5059f-3973-4a74-9c9b-a537b737e0ab",
      "event:state" : "PA",
      "event:street:address" : "Ben Franklin Parkway",
      "event:zip" : 19130
    },
    "MIA2" : {
      "attend:count" : 2,
      "event:category" : "Dress To Impress",
      "event:city" : "Philadelphia",
      "event:date" : {
        "end:date" : "09/03/2017",
        "end:time" : "7:00 PM",
        "start:date" : "09/02/2017",
        "start:time" : "12:00 PM"
      },
      "event:description" : "Budweiser Made in America Festival is an annual music festival held in Philadelphia and formerly simultaneously held in Los Angeles. Sponsored by Anheuser–Busch and produced by Live Nation, the event features several stages that continuously host live music from a wide range of genres including hip hop, rock, pop, R&B, and EDM. This is different regardless of the same name in database",
      "event:imageURL" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_flyers%2Fmadeinamerica2.jpg?alt=media&token=bd5eb5e4-4e22-4412-a34b-2dc6c9ae561e",
      "event:name" : "made in america",
      "event:promo" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_promo_vid%2FMIA%2FBudweiser%20Made%20In%20America%20Festival%202013%20August%2031%20-%20September%201.mp4?alt=media&token=11e5059f-3973-4a74-9c9b-a537b737e0ab",
      "event:state" : "PA",
      "event:street:address" : "Ben Franklin Parkway",
      "event:zip" : 19130
    },
    "MIA3" : {
      "attend:count" : 8,
      "event:category" : "21 & Up",
      "event:city" : "Philadelphia",
      "event:date" : {
        "end:date" : "09/03/2017",
        "end:time" : "7:00 PM",
        "start:date" : "09/02/2017",
        "start:time" : "12:00 PM"
      },
      "event:description" : "Budweiser Made in America Festival is an annual music festival held in Philadelphia and formerly simultaneously held in Los Angeles. Sponsored by Anheuser–Busch and produced by Live Nation, the event features several stages that continuously host live music from a wide range of genres including hip hop, rock, pop, R&B, and EDM.",
      "event:imageURL" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_flyers%2Fmadeinamerica3-compressor.jpg?alt=media&token=9166e2fb-ac9d-46d5-b06f-60cffc337b15",
      "event:name" : "made in america",
      "event:promo" : "https://firebasestorage.googleapis.com/v0/b/eventful-3d558.appspot.com/o/event_promo_vid%2FMIA%2FBudweiser%20Made%20In%20America%20Festival%202013%20August%2031%20-%20September%201.mp4?alt=media&token=11e5059f-3973-4a74-9c9b-a537b737e0ab",
      "event:state" : "PA",
      "event:street:address" : "Ben Franklin Parkway",
      "event:zip" : 19130
    }
  }

我还具有另一个节点,该节点按位置存储所有事件,下面还将在其中包括该节点,以消除混乱

eventsbylocation" : {
    "37%2e7,-122%2e4" : {
      "event0" : "MIA",
      "event1" : "CCDS",
      "event2" : "MIA2",
      "event3" : "MIA3",
      "event4" : "DD"
    },
    "40%2e7,-74%2e0" : {
      "event" : "DD"
    }
  }

我从eventsbylocation节点中拉出键,然后返回所有事件(如果它们选择了家庭类别),或者返回了一个或多个事件(如果它们位于不同类别中),如果我选择了该类别,则说“抓住一天”返回有关CCDS的所有信息。

我进行代码设置的方式是,对于eventsByLocation中的每个键,它会根据该键检查events节点中的category字段。 如果匹配,则应返回相关信息,但不返回任何内容,

以下是我处理此方法的代码

import Foundation
import Firebase
import FirebaseAuth


struct EventService {

    static func show(forEventKey eventKey: String, eventCategory: String? = nil, completion: @escaping (Event?) -> Void) {
       // print(eventKey)
        let ref = Database.database().reference().child("events").child(eventKey)
       // print(eventKey)

            if eventCategory == "Home" || eventCategory == nil || eventCategory == ""{
                //pull everything
                ref.observeSingleEvent(of: .value, andPreviousSiblingKeyWith: { (snapshot,eventKey) in
                    print(snapshot.value ?? "")
                    guard let event = Event(snapshot: snapshot) else {
                        return completion(nil)
                    }
                    completion(event)
                })

            }else{
                //pull based off of category
                print(eventCategory)
                print("Begin Query By Event Category")
                var query = ref.queryOrdered(byChild: "event:category").queryEqual(toValue: eventCategory)
                query.observeSingleEvent(of: .value, with: { (snapshot) in
                    print(snapshot)

                }, withCancel: { (err) in
                    print("Failed to fetch event data")
                })
            }


    }
}

关于我可能做错了什么的任何见解? 因为它此时绝对不返回任何内容,所以我知道这是由于我的查询引起的,但是我只是无法弄清楚它出了什么问题。

没关系,当我从那一点拉出事件对象时,我已经有了类别,我所要做的只是返回之前的简单字符串检查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM