我正在尝试使用Swift将SQLite数据库中的结果获取到包含行和列的NSTableView中。数据库查询没有问题,运行应用程序时也没有错误。但是,表始终为空。我的代码中缺少了什么?提前感谢
这是我的密码
class SecondViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet var tableview: NSTableView!
var querySQL = ""
var bdadosDB: OpaquePointer?
var statement: OpaquePointer?
var allRows = [String]()
var rows = [String]()
var cols = [String]()
let CellIdentifiers :[String] = ["ordCell", "procCell", "espCell", "natCell", "recCell", "estCell", "julgCell", "decCell"]
override func viewDidLoad() {
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let docsDir = dirPaths[0]
let databasePath = (docsDir as NSString).appendingPathComponent("bdados.db")
let dbpath = databasePath
sqlite3_open(dbpath, &bdadosDB)
querySQL = "SELECT * FROM proc"
sqlite3_prepare_v2(bdadosDB, querySQL, -1, &statement, nil)
while (sqlite3_step(statement) == SQLITE_ROW)
{
let str = String(cString: sqlite3_column_text(statement, 0)) + ";"
let str_1 = String(cString: sqlite3_column_text(statement, 1)) + ";"
let str_2 = String(cString: sqlite3_column_text(statement, 2)) + ";"
let str_3 = String(cString: sqlite3_column_text(statement, 3)) + ";"
let str_4 = String(cString: sqlite3_column_text(statement, 4)) + ";"
let str_5 = String(cString: sqlite3_column_text(statement, 5)) + ";"
let str_6 = String(cString: sqlite3_column_text(statement, 6)) + ";"
let str_7 = String(cString: sqlite3_column_text(statement, 7)) + "_"
let result = str + str_1 + str_2 + str_3 + str_4 + str_5 + str_6 + str_7
allRows.append(result)
}
let str_arr = allRows.joined(separator: " ")
rows = str_arr.components(separatedBy: "_")
tableview.dataSource = self
tableview.delegate = self
super.viewDidLoad()
}
func numberOfRows(in tableView: NSTableView) -> Int {
return allRows.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
var text: String = ""
var cellIdentifier: String = ""
for i in 0 ..< rows.count
{
let rw = rows[i]
cols = rw.components(separatedBy: ";")
for j in 0 ..< cols.count {
let col = cols[j]
text = col
if tableColumn == tableView.tableColumns[j] {
cellIdentifier = CellIdentifiers[j] }
}
}
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: cellIdentifier) , owner: nil) as? NSTableCellView {
cell.textField?.stringValue = text
return cell }
else {
return nil }
}
func reloadFileList() {
tableview.reloadData()
}
}
1条答案
按热度按时间nnvyjq4y1#
这是单元格标识符的问题。现在它可以工作了--但是我总是得到相同的(最后一个)表行。有没有可能在for循环中放置和执行委托函数?