首页 > 解决方案 > 此代码的 viewDidLoad vs viewWillAppear vs viewDidAppear 部分

问题描述

我正在尝试从我下载并尝试在我的代码中使用的项目中处理这段代码。在 viewDidLoad 中,pickerView 由“新拼图”填充,或者如果用户在以前的 VC 中保存了游戏,则保存的游戏。按照最初的编写方式,用户保存了游戏,然后通过选择器视图返回到这个控制器。在我的“mod”中,我将两个 VC 嵌入到导航控制器中,从而获得了一个不错的后退按钮以返回到 pickerView 控制器。但是,加载pickerView是在viewDidLoad函数中,我的理解是,只加载一次。

有人可以帮助我,需要移动 viewDidLoad 中的哪些项目。移动时,他们是否需要进入 viewWillAppear 或 viewDidAppear?我的理解是它应该在 viewWillAppear 中。

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "Games"

        DispatchQueue.main.async {
            if !Settings.shared.adsEnabled {
                self.removeTableViewHeader()
            } else {
                //self.tableView.layoutTableHeaderView()
            }
        }
        //Picker Stuff
        // Connect data:
            self.picker.delegate = self
            self.picker.dataSource = self


            copyDatabaseIfNeeded("puzzles")
        // open database
            if sqlite3_open(finalDatabaseUrl2.path, &db2) != SQLITE_OK {
                //print("error opening db")
            }
            else{

            }

            pickerData.append("New Puzzle")

        //retrieve all dates from previous puzzles and add them to pickerview
            var queryStatement2 = ""

            queryStatement2 = "SELECT * FROM puzzle;"

            self.statement2 = nil
            if sqlite3_prepare_v2(self.db2,queryStatement2,-1,&self.statement2,nil) == SQLITE_OK{

                while(sqlite3_step(self.statement2) == SQLITE_ROW){
                    let date = sqlite3_column_text(self.statement2,2)
                    let comp = sqlite3_column_text(self.statement2,3)

                    let dateString = String(cString: date!)
                    let compString = String(cString: comp!)

                    pickerData.append("\(dateString) - \(compString)")
                }
            //sqlite3_reset(self.statement2)
                sqlite3_finalize(self.statement2)

            }
        }

标签: iosswiftviewdidloadviewwillappearviewdidappear

解决方案


override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "Games"

        DispatchQueue.main.async {
            if !Settings.shared.adsEnabled {
                self.removeTableViewHeader()
            } else {
                //self.tableView.layoutTableHeaderView()
            }
        }
        //Picker Stuff
        // Connect data:
            self.picker.delegate = self
            self.picker.dataSource = self



        }

override func viewDidAppear() {
 copyDatabaseIfNeeded("puzzles")
 pickerData = []
            // open database
                if sqlite3_open(finalDatabaseUrl2.path, &db2) != SQLITE_OK {
                    //print("error opening db")
                }
                else{

                }

                pickerData.append("New Puzzle")

            //retrieve all dates from previous puzzles and add them to pickerview
                var queryStatement2 = ""

                queryStatement2 = "SELECT * FROM puzzle;"

                self.statement2 = nil
                if sqlite3_prepare_v2(self.db2,queryStatement2,-1,&self.statement2,nil) == SQLITE_OK{

                    while(sqlite3_step(self.statement2) == SQLITE_ROW){
                        let date = sqlite3_column_text(self.statement2,2)
                        let comp = sqlite3_column_text(self.statement2,3)

                        let dateString = String(cString: date!)
                        let compString = String(cString: comp!)

                        pickerData.append("\(dateString) - \(compString)")
                    }
                //sqlite3_reset(self.statement2)
                    sqlite3_finalize(self.statement2)

                }
}

您可以像这样更新您的代码。


推荐阅读