我有一個應用程序,它有一個數據庫(和服務器中的數據庫)。當我打開應用程序時,它會調用一個函數,它從服務器獲取信息並將信息存儲在本地數據庫中(我正在使用SQliteSwift),當我打開視圖時,該表爲空,然後關閉/返回重新打開視圖,一切都在那裏。所以我實現了一個刷新按鈕,當我向服務器的數據庫添加一條新記錄,然後調用Refresh函數重新加載數據時,應用程序崩潰,說我存儲信息的數組超出了界限。這可能是因爲我更新了服務器,但不是我的本地數據庫,所以當我執行刷新功能時,它會嘗試再次加載信息。我在想,也許我應該把刷新功能和從viewWillAppear(而不是viewDidLoad,因爲我在那裏)從服務器檢索信息的函數。你們有什麼感想? viewWill在這種情況下需要什麼?viewDidLoad和viewWillAppear。從服務器下載數據和更新表查看
更新
我忘了提,我有一個調用在不同的視圖服務器的功能(這是一個按鈕,單擊它時調用函數,並與的tableView打開視圖)
了的tableView類的代碼如下所示...
//Create arrays where the information will be stored
var numPoliza = [String]()
var vigencia = [String]()
var inicioVigencia = [String]()
var statusTabla = [String]()
var nombres = [String]()
var apellidos = [String]()
var ids = [String]()
//Refresher
var refresh: UIRefreshControl!
//My viewDidLoad where I call the function that connects to the server
override func viewDidLoad() {
super.viewDidLoad()
do{
for consulta in try conn.db!.prepare(tblPoliza){
numPoliza.append(String(consulta[numeroPoliza]))
vigencia.append(String(consulta[fechaExpiracion]))
inicioVigencia.append(String(consulta[fechaCreacion]))
statusTabla.append(String(consulta[status]))
}
}
catch{
//Errors thrown
}
do{
let query = tblPersona.select(tblPersona[nombre], tblPersona[id], tblPersona[apaterno])
.join(tblPoliza, on: tblPersona[id] == tblPoliza[idCliente])
for datos in try conn.db!.prepare(query){
nombres.append(datos[nombre]!)
apellidos.append(datos[apaterno]!)
ids.append(String(datos[id]))
}
}
catch{
//Errors thrown
}
//Refresher that calls the function from below
refresh = UIRefreshControl()
refresh.attributedTitle = NSAttributedString(string: "Estira para actualizar")
refresh.addTarget(self, action: #selector(ConsultaPolizas.getInfoDesdeBD), for: UIControlEvents.valueChanged)
tablaView.addSubview(refresh)
}
//Refresh function that Calls the Database and appends the information into the arrays
func getInfoDesdeBD(){
do{
for consulta in try conn.db!.prepare(tblPoliza){
numPoliza.append(String(consulta[numeroPoliza]))
vigencia.append(String(consulta[fechaExpiracion]))
}
}
catch{
//Errors thrown
}
tablaView.reloadData()
refresh.endRefreshing()
}
而且,調用後者從服務器信息的功能按鈕(其它功能)。
@IBAction func consultaPolizas(_ sender: Any) {
//Imprime polizas
for usuario in arregloIds {
addHospitalMap.addPin.muestraPolizaWeb(numeroID: usuario)
}
self.performSegue(withIdentifier: "poliza", sender: self)
}
請問您可以爲此添加一些代碼嗎?嘗試用斷點調試它,看看發生了什麼。 – Singhal2
你訪問一個數組索引超過它的限制並不重要 - 它總會有一個異常。關鍵是要更新你的數組,以及你正在使用什麼來同時生成索引。 –
@ Singhal2我更新了問題並添加了代碼 –