ios - 此代码的 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)
}
}
解决方案
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)
}
}
您可以像这样更新您的代码。
推荐阅读
- jestjs - 如何在多个文件中运行 Jest-Puppeteer 测试
- php - Magento 1 自己的数据库表
- java - 如何使用poi删除excel文件的多行数据
- android - 可绘制位图
- elasticsearch - Logstash - 尝试创建一个经过的过滤器
- python - 烧瓶 sqlalchemy:Mysql 连接
- arrays - 如何将基于 http 请求参数构建的自定义对象附加到 node-red 中的全局上下文数组?
- kubernetes - 在 Kubernetes 中共同定位 pod 和持久卷
- magento - Magento 表费率运费 - 将某些地区排除在运费之外
- hive - 如何查找配置单元表的更新日期?