sqlite NSTableView变为空白

vohkndzv  于 2023-03-13  发布在  SQLite
关注(0)|答案(1)|浏览(131)

我正在尝试使用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()
      }
    }
nnvyjq4y

nnvyjq4y1#

这是单元格标识符的问题。现在它可以工作了--但是我总是得到相同的(最后一个)表行。有没有可能在for循环中放置和执行委托函数?

相关问题