Swift Firebase查询需要一分钟

时间:2017-03-30 16:08:58

标签: ios swift firebase firebase-realtime-database

好的,我有一个Swift应用程序,可以将此Firebase数据库加载到tableview中。问题是,获取Firebase响应并加载数据可能需要一整分钟。无论互联网连接如何,这都会发生。我在这里做错了,数据库中只有7个这样的项目,所以我看不出这是数据库太大的问题。我还应该注意,只需通过浏览器上的Firebase控制台加载实时数据库至少需要一分钟。

知道这里出了什么问题吗?下面是我查询数据库的代码,以及我在Firebase控制台中加载的内容的快照。

哦,我使用的是免费的Firebase帐户,但我没有看到定价选项对速度的限制,所以我不认为这是问题。

  private func loadItems(){

    var ref: FIRDatabaseReference!
    ref = FIRDatabase.database().reference()

    ref.child("DonationItem").observeSingleEvent(of: .value, with: { (snapshot) in

        if let values = snapshot.value as? NSDictionary {

            for (key,_) in values{

                let donationItem: NSObject = values[key] as! NSObject

                let myTitle: String! = donationItem.value(forKey: "title") as? String
                let myItemID: String! = donationItem.value(forKey: "itemID") as? String

                let myPhotoString = donationItem.value(forKey: "image") as? String
                let decodedData = NSData(base64Encoded: myPhotoString!)
                let myImage = UIImage(data: decodedData as! Data)

                let myDescription = donationItem.value(forKey: "description") as? String
                let myDate = donationItem.value(forKey: "expiration") as? String
                let myLatitude = donationItem.value(forKey: "latitude") as? Double
                let myLongitude = donationItem.value(forKey: "longitude") as? Double
                let myCoordinates = CLLocationCoordinate2D(latitude: myLatitude!, longitude: myLongitude!)
                let myUserID = donationItem.value(forKey: "userID") as? String
                let myAddress = donationItem.value(forKey: "address") as? String


                var  donated: Bool
                if let donatedInt = donationItem.value(forKey: "donated") as? Int {
                    donated = Bool(donatedInt as NSNumber)
                } else {
                    donated = true
                }

                let donation1 = DonatedItem(myTitle, myImage!, donated, myDescription!, myDate!, myCoordinates, myUserID!, myItemID!, myAddress!)
                self.addItem(item: donation1!)

                }
        }


    }) { (error) in
        print(error.localizedDescription)
    }

}

这是Firebase控制台。

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如何确定long和lat,并且在查询执行之前完成了吗?它可能不是查询问题。

修改:

编码图像大小最终是这个问题的问题。如果图像是硬编码的图像URL,则图像可能会变得非常大并且会减慢查询中的响应时间。注意检索图像的方式。

更好的方法是将图像存储在Firebase存储中,并在数据库中添加对它的引用,正如@riper在对此答案的评论中所写。