viewDidLoad vs viewWillAppear vs viewDidAppear部分代码

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

我正在尝试从我下载的项目中处理这段代码,并尝试在我的代码中使用。在viewDidLoad中,将通过“ New Puzzle”填充pickerView,或者如果用户在以前的VC中保存了游戏,则将保存该游戏。最初编写此代码的方式是,用户保存了游戏,然后通过pickerView返回到此控制器。在我的“ 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)

            }
        }
ios swift viewdidload viewwillappear viewdidappear
1个回答
0
投票
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)

                }
}

您可以这样更新代码。

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