好的,我有一个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控制台。
感谢您的帮助!
答案 0 :(得分:0)
如何确定long和lat,并且在查询执行之前完成了吗?它可能不是查询问题。
修改:
编码图像大小最终是这个问题的问题。如果图像是硬编码的图像URL,则图像可能会变得非常大并且会减慢查询中的响应时间。注意检索图像的方式。
更好的方法是将图像存储在Firebase存储中,并在数据库中添加对它的引用,正如@riper在对此答案的评论中所写。