gpt4 book ai didi

ios - 拍摄 Firebase 数据的快照并存储数据

转载 作者:行者123 更新时间:2023-11-29 11:48:44 29 4
gpt4 key购买 nike

我有以下 JSON Firebase 数据库:

{ "fruits": {
"apple": {
"name": "Gala",
"url": "//s-media-cache-ak0.pinimg.com/564x/3e/b1/e7/3eb1e756d66856975d6e43ebb879200a.jpg",
"fruitArray": [1, 2]
},
"orange": {
"name": "Tangerine",
"url": "//userscontent2.emaze.com/images/0ba588c8-42d9-45e9-a843-d19e5720515a/e430f9a827f139e9f99f2826175dd0a9.jpg",
"fruitArray": []
}
}
}

下面的 Fruit 类:

class Fruit {
var name: String
var url: String
var fruitArray: [Int]
var ref: FIRDatabaseReference?

init(name: String, url: String, fruitArray: [Int]) {
self.name = name
self.url = url
self.fruitArray = fruitArray
self.ref = nil
}

init(snapshot: FIRDataSnapshot) {
let snapshotValue = snapshot.value as! [String: Any]
name = snapshotValue["name"] as! String
url = snapshotValue["url"] as! String
if snapshotValue["fruitArray"] == nil {
fruitArray = [0]
} else {
fruitArray = snapshotValue["fruitArray"] as! [Int]
}
ref = snapshot.ref
}

func toAnyObject() -> Any {
return [
"name": name,
"url": url,
"fruitArray": fruitArray
]
}

以及以下 FruitTableViewController 代码:

class FruitTableViewController: UITableViewController {

// MARK: Properties
var fruits: [Fruit] = []

override func viewDidLoad() {
super.viewDidLoad()

let ref = FIRDatabase.database().reference(withPath: "fruits")

ref.queryOrdered(byChild: "name").observe(.value, with: { snapshot in
var addedFruits: [Fruit] = []

for fruit in snapshot.children {
let newFruit = Fruit(snapshot: fruit as! FIRDataSnapshot)
addedFruit.append(newFruit)
}

self.fruits = addedFruits

self.tableView.reloadData()
})
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fruits.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? FruitTableViewCell

let fruit = fruits[indexPath.row]
let imgURL = NSURL(string: fruit.url)

if imgURL != nil {
let data = NSData(contentsOf: (imgURL as? URL)!)
cell.icon.image = UIImage(data: data as! Data)
}

cell.nameLabel.text = fruit.name

return cell
}

出于某种原因,Firebase 快照无法正常工作。我已经尝试了几乎所有的东西,但没有运气。

这不是 TableViewCell 问题(我认为),因为我检查了 FruitViewCell 和 Storyboard,一切都井井有条。我的直觉是,它与我将 URL 更改为字符串和数组的方式有关。我已经将这个确切的代码用于另一个 iOS 项目并且它有效,但是这两个项目之间的区别在于这个项目在 JSON 中有一个数组和链接,而另一个没有。

我已经看到有其他方法可以拍摄快照,但我打算在整个应用程序中使用水果数据,因此我更容易拥有一个水果对象,但如果有人这样做,我不会介意建议另一种拍摄快照的方法。感谢您的帮助!

最佳答案

首先使用此代码更改您的 viewDidLoad,因为根本不需要 addedFruites

override func viewDidLoad() {
super.viewDidLoad()

let ref = FIRDatabase.database().reference().child("fruits")

ref.observe(.value, with: { snapshot in
if snapshot.exists() {
for fruit in snapshot.children {
let newFruit = Fruit(snapshot: fruit as! FIRDataSnapshot)
self.fruits.append(newFruit)
}
self.tableView.reloadData()
}

})
}

check firebase rules for read and write is properly set or not.. I think here is an issue because may be you did not set that rules.

关于ios - 拍摄 Firebase 数据的快照并存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42172311/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com