iOS Swift 5在TabBarController的View Controller中使用云数据库中的数据

问题描述 投票:0回答:1

问题:我无法将数据下载到Singleton类的数组中以在两个视图控制器中填充表视图。

我正在编写具有Parse后端的银行存折iOS应用。我在选项卡栏控制器中有一个登录viewController和其他四个视图控制器。我有一个单例类,该类从解析服务器获取数据并加载四个数组。我希望该数据在其他两个视图控制器中填充表视图。我想尽可能少地进行数据调用。初始视图控制器是用户输入借方和贷方的地方。因此,我的计划是从viewDidLoad调用GetData类来填充表,以防用户在不输入借方或贷方的情况下访问它们。

输入借项或贷项后,有一个函数将借项或贷项保存到Parse服务器之后,再次调用GetData类以更新GetData类中的数组。

两个视图控制器访问GetData类中的数组以填充表,并且当通过Tab控制器访问视图时,每个视图控制器的viewDidAppear中都有一个tableView.reloadData()调用。

最多只能间歇性地工作。有时我获得了五个成功的更新,然后它继续显示旧数据,然后它将突然显示所有数据。

查看我的云数据库,所有条目在创建时都存在,并且我已经验证了viewWillAppear正在访问的每个视图控制器中触发。

我需要一种可靠的方法来获取数据,以分别在其他视图控制器中进行更新。时间。我很乐意废弃此应用,并在需要时进行重写。

这是我的单例课程的代码:

    class GetData {

        static let sharedInstance = GetData()

        var transactionArray = [String]()
        var dateArray = [String]()
        var toFromArray = [String]()
        var isDebitArray = [String]()

        func getdata() {

            let query = PFQuery(className:"Transaction")

            query.findObjectsInBackground { (objects, error) in

                self.transactionArray.removeAll()
                self.dateArray.removeAll()
                self.toFromArray.removeAll()
                self.isDebitArray.removeAll()

                print("query fired")

                    if objects != nil {

                    for object in objects! {

                        if let amount = object.object(forKey: "amount") as? String {
                            if let date = object.object(forKey: "date") as? String {
                                if let toFrom = object.object(forKey: "toFrom") as? String {
                                    if let isDebit = object.object(forKey: "isDebit") as? String {

                                        self.transactionArray.append(amount)
                                        self.dateArray.append(date)
                                        self.toFromArray.append(toFrom)
                                        self.isDebitArray.append(isDebit)

                                        }
                                    }
                                }
                            }
                        }
                    }

                 self.transactionArray.reverse()
                 self.dateArray.reverse()
                 self.toFromArray.reverse()
                 self.isDebitArray.reverse()

                 dump(self.toFromArray)

                }
        }
    }

这里是视图控制器之一的示例:

class RecordVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

        @IBOutlet var recordTableView: UITableView!

         override func viewDidLoad() {
                super.viewDidLoad()

                recordTableView.delegate = self
                recordTableView.dataSource = self

             recordTableView.reloadData()

           }

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)

            recordTableView.reloadData()

            print("recordVC viewWillAppear fired")

        }


           @IBAction func resetFoundButton(_ sender: Any) {
           }

           func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

               let cell = recordTableView.dequeueReusableCell(withIdentifier: "RecordCell", for: indexPath) as! RecordCell
               cell.amountLabel?.text = "$\(GetData.sharedInstance.transactionArray[indexPath.row])"
               cell.dateLabel?.text = "\(GetData.sharedInstance.dateArray[indexPath.row])"
               cell.toFromLabel?.text = "\(GetData.sharedInstance.toFromArray[indexPath.row])"
               let cellColor = backGroundColor(isDebit: GetData.sharedInstance.isDebitArray[indexPath.row])
               cell.backgroundColor = cellColor
               cell.backgroundColor = cellColor
               return cell

               }

           func backGroundColor(isDebit:String) -> UIColor{

               if isDebit == "false" {

                   return UIColor.green

                   } else {

                   return UIColor.blue

                   }

               }

           func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

               return GetData.sharedInstance.transactionArray.count

           }


    }

谢谢

问题:我无法将数据下载到单例类的数组中以在两个视图控制器中填充表视图。我正在编写一个具有Parse后端的银行存折iOS应用程序。我有一个登录名...

ios swift parsing viewcontroller
1个回答
0
投票

我想说,在执行查询和GetData类中的数据更新之后,不要通过在viewWillAppear()中调用tableView.reloadData()来重新加载表,而是应该在Tableview中触发通知或使用委托来重新加载表。

© www.soinside.com 2019 - 2024. All rights reserved.