【发布时间】:2020-05-25 03:26:36
【问题描述】:
我正在尝试从我下载并尝试在我的代码中使用的项目中处理这段代码。 在 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)
}
}
【问题讨论】:
-
viewDidLoad()->viewWillAppear()->viewDidAppeared()。viewDidLoad()仅在您初始化视图时调用 1 次。当您访问视图时,另一个将调用。如果您希望在访问视图时更改 UI 中的某些内容(该视图之前没有deinit),请在viewDidAppeared()中调用它 -
感谢国王。我尝试将所有内容移到 //Picker Stuff 下方。但是,现在当我回去时,我得到了两个“新拼图”条目。如果我再次回到根目录并回到这个 VC,我就会得到我想要完成的任务。一个“新谜题”和一个保存。如何摆脱出现的第二个“新谜题”?
-
这是重复的,因为当您返回 VC 时,您会查询新项目并将其附加到您的选择器。根据您的目的,您可以在 ViewDidLoad() 中初始化 Picker,并且数据可以适应 viewDidAppeared 但不能追加,如果您像这样查询所有内容,则需要设置为数组。不追加
-
请问可以帮帮我吗?这超出了我目前的知识范围。
标签: ios swift viewdidload viewwillappear viewdidappear