gpt4 book ai didi

ios - 在 Swift ios 中从 SQlite 的 TableView 单元格中重复检索数据三次

转载 作者:行者123 更新时间:2023-11-28 06:03:08 25 4
gpt4 key购买 nike

我正在将数据从 SQLite 检索到 TableView 单元格,但是数据被检索了三次重复,这意味着在每个数据上应该有一个单元格,检索到的数据将在其中.但目前的情况是,对于每个数据,三个单元格都显示在表格 View 单元格中,如何在不重复的情况下检索数据。

enter image description here

代码如下:

import UIKit
import SQLite
import SQLite3

@available(iOS 11.0, *)
class ViewAssetViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


var database: Connection!
let assetsTable = Table("AssetTable")
let assetid = Expression<Int>("assetid")
let assetname = Expression<String>("assetname")
let assetdescription = Expression<String>("assetdescription")
let assetform = Expression<String>("assetform")
let assetdate = Expression<String>("assetdate")


var assetIdArray = [Int]()
var assetNameArray = [String]()
var assetDescArray = [String]()
var assetTempArray = [String]()
var assetCreateDateArray = [String]()

var getAssetId = String()
var assetIdIs = Int()
var assetNameIs = String()
var assetDescIs = String()
var assetTempIs = String()
var assetCreateDateIs = String()


var SubmittedList = [String]()

@IBOutlet weak var menu: UIBarButtonItem!

@IBOutlet weak var SubmittedListTable: UITableView!

@IBAction func SubmittedLeftAct(_ sender: Any) {
print("submitted left action")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
self.getDataAssetIs()
return assetNameArray.count
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = SubmittedListTable.dequeueReusableCell(withIdentifier: "SubmittedCell") as! SubmittedTableViewCell

// self.getDataAssetIs()

cell.submittedLabel.text = assetNameArray[indexPath.row]
cell.submittedOnLabel.text = "Created on: \(assetCreateDateArray[indexPath.row])"
cell.associatedTempLabel.text = "Associated template: \(assetTempArray[indexPath.row])"
cell.assetDescLabel.text = assetDescArray[indexPath.row]

return cell
}


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
print("delete")
if editingStyle == .delete {
print("Deleted")
let userId = assetIdArray[indexPath.row]
let user = self.assetsTable.filter(self.assetid == userId)
let deleteUser = user.delete()
do {
try self.database.run(deleteUser)
// assetIdArray.remove(at: [indexPath.row])
assetIdArray.remove(at: indexPath.row)
assetNameArray.remove(at: indexPath.row)
assetDescArray.remove(at: indexPath.row)
assetTempArray.remove(at: indexPath.row)
assetCreateDateArray.remove(at: indexPath.row)

SubmittedListTable.deleteRows(at: [indexPath], with: .automatic)

// assetDescArray.remove(at: [indexPath.row])

// numbers.removeAtIndex(indexPath.row)
//tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)


} catch {
print(error)
}
}
SubmittedListTable.reloadData()
}



func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

// let indexPath = PDFListTable.indexPathForSelectedRow //optional, to get from any UIButton for example

// let currentCell = PDFListTable.cellForRow(at: indexPath!) as! PDFTableViewCell
// formName = currentCell.titleLabel!.text!
// print(currentCell.titleLabel!.text!)

self.moveToEdit()

}


func createAssetTable() {
print("CREATE TAPPED")
let createTable = self.assetsTable.create(ifNotExists: true){ (table) in
table.column(self.assetid, primaryKey: true)
table.column(self.assetname)
table.column(self.assetdescription)
table.column(self.assetform)
table.column(self.assetdate)
//try self.database?.run(usersTable.addColumn(formcreatedate))
}
do {


try self.database?.run(createTable)
print("Created Table")
} catch {
print(error)
}
}


func getDataAssetIs() {


do {
let users = try self.database?.prepare(self.assetsTable)
for user in users! {
print("userId: \(user[self.assetid]), name: \(user[self.assetname]), email: \(user[self.assetdescription]), formcate: \(user[self.assetform]), mydate: \(user[self.assetdate])")
assetIdIs = user[self.assetid]
assetNameIs = user[self.assetname]
assetDescIs = user[self.assetdescription]
assetTempIs = user[self.assetform]
assetCreateDateIs = user[self.assetdate]

self.assetIdArray.append(assetIdIs)
self.assetNameArray.append(assetNameIs)
self.assetDescArray.append(assetDescIs)
self.assetTempArray.append(assetTempIs)
self.assetCreateDateArray.append(assetCreateDateIs)


//print(formNameArray)
}
} catch {
print(error)
}

}






func moveToEdit() {

let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle : nil)
let desController = mainStoryBoard.instantiateViewController(withIdentifier: "ViewFormViewController") as! ViewFormViewController
let newFrontViewController = UINavigationController.init(rootViewController:desController)
revealViewController().pushFrontViewController(newFrontViewController, animated: true)

}

override func viewDidLoad() {
super.viewDidLoad()

do {
let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let fileUrl = documentDirectory.appendingPathComponent("Stephencelis").appendingPathExtension("sqlite3")
let database = try Connection(fileUrl.path)
self.database = database
} catch {
print(error)
}

self.createAssetTable()

/*
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS AssetTable (assetid INTEGER PRIMARY KEY AUTOINCREMENT, assetname TEXT, assetdescription TEXT, assetform TEXT, assetdate Text)", nil, nil, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
}

*/

SubmittedListTable.delegate = self
SubmittedListTable.dataSource = self

//SubmittedList = ["Asset title 1", "Asset title 2","Asset title 3","Asset title 4", "Asset title 5", "Asset title 6","Asset title 7", "Asset title 8", "Asset title 9","Asset title 10", "Asset title 11", "Asset title 12"]
// Do any additional setup after loading the view.


menu.target = revealViewController()
menu.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

navigationController?.navigationBar.barTintColor = UIColor(red:0.00, green:0.52, blue:1.00, alpha:1.0)
navigationController?.navigationBar.tintColor = UIColor.white
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

最佳答案

numberOfRowsInSection 可以调用任意次数。您不应该在该方法中加载数据。

调用 getDataAssetIs() 一次,而不是一遍又一遍。 viewDidLoad 是调用它的好地方。但绝对不是来自 numberOfRowsInSection

关于ios - 在 Swift ios 中从 SQlite 的 TableView 单元格中重复检索数据三次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com