【问题标题】:Swift Passing Data Structs and Arrays FirebaseSwift 传递数据结构和数组 Firebase
【发布时间】:2022-01-20 17:38:53
【问题描述】:

我正在尝试将数据从 vc_1 发送到 vc_2。但我观察到 vc_2(篮子项目)中缺少提交的数据。我如何观察vc_2中的所有数据?

Firebase 节点;

Pro_:
     Basket:
        ID_1:
           cat: “Tech”
           info:”iOS” 
           orderid:”Ref_1” 
        ID_2:
           cat: “Tech”
           info:”Android” 
           orderid:”Ref_2” 
     name:”Mike”

First_VC

    var name_list = [Name_Struct]()
    var SecondArray : [BasketArray] = []

    func retrieve_data(){
        ref = Database.database().reference()
        self.ref.child(“Pro_”).observeSingleEvent(of:.value) { (snapshot) in
            self.name_list.removeAll()
            for child in snapshot.children{
                let snap = child as! DataSnapshot
                let dict = snap.value as! NSDictionary
                        let name_ = dict[“name”] as? String ?? ""
                let baskets = (child as AnyObject).childSnapshot(forPath: “Basket”).value as? [String: Any] ?? [:]
                for basket in baskets {
                    let pro_detail = basket.value as? [String: Any]
                    let info_ = basket?[“info”] as? String ?? ""
                    let cat_ = basket?[“cat”] as? String ?? ""
                    let orderid_ = basket?[“orderid”] as? String ?? ""
                    self.SecondArray.append(BasketArray(info: info_, cat: cat_, orderid: orderid_)
                }
                    let names = Name_Struct(name: name_)
                            self.name_list.append(names)
                        DispatchQueue.main.async {
                            self.tableView.reloadData()
                        }}}}}
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
         if let destination = segue.destination as? Second_VC {
            destination.SecondArray = SecondArray[indexPath.row]
            print(“Send array:”,self.SecondArray)
        }}

发送数组输出

发送数组:[“cat”:“Tech”,“info”:“iOS”,“orderid”:“Ref_1”] 发送数组:[“cat”:“Tech”,“info”:“Android”,“orderid”:“Ref_2”]

Second_VC

    var SecondArray : BasketArray!
override func viewDidLoad() {
        super.viewDidLoad()

        table_view.delegate = self
        table_view.dataSource = self
    print(“retrieve:”,self.SecondArray)        
    }

Second_VC 输出;

检索:[“cat”:“Tech”,“info”:“Android”,“orderid”:“Ref_2”]

【问题讨论】:

    标签: swift uitableview firebase-realtime-database pass-data


    【解决方案1】:

    这可能是因为在 First_VC 中最嵌套的 for 循环中,您有

    self.SecondArray = BasketArray(info: info_, cat: cat_, orderid: orderid_)
    

    因为它在 for 循环中,所以 self.SecondArray 设置为 ID_1 值,然后在第二次运行循环时将其覆盖为 ID_2 值。您希望将两个数据都附加到 SecondArray,而不是像这里那样覆盖它们。

    【讨论】:

    • 感谢您的回答。我该如何解决这个问题?
    • 你的 BasketArray,如果它想存储多个 Basket 需要是一个数组 - 所以 var SecondArray : [BasketArray?]。然后你想追加到那个 SecondArray,所以 SecondArray.append(whatever data you parsed)
    • 不太可能是数组中的可选项
    • 我更新了问题。我正在观察第一个 vc 中的所有数据(覆盖 func prepare->send 数组),但我在第二个 vc 中只有一个数组观察
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多