【问题标题】:Populate an NSTableView using an array - bind table使用数组填充 NSTableView - 绑定表
【发布时间】:2014-12-09 08:41:14
【问题描述】:

喂!

我在将一些数据从数组显示到 NSTableView 时遇到问题。 我的信息保存在核心数据中。我将此信息添加到一个数组中,但是当我尝试在表中添加此信息时,我收到的只是一个具有正确行数的表,但都具有相同的隐式文本:“TableView Cell”。

我为每个表列设置了一个标识符,我认为我的绑定是正确的。 这是我的表控制器代码:

  @IBAction func reload(sender: NSButton) {
    tableView.reloadData()
}

func getItemsFromDataBase() {
    let fetchRequest = NSFetchRequest(entityName: "MyData")

    // Create a sort descriptor object that sorts on the "title"
    // property of the Core Data object
    let sortDescriptor = NSSortDescriptor(key: "nume", ascending: true)

    // Set the list of sort descriptors in the fetch request,
    // so it includes the sort descriptor
    fetchRequest.sortDescriptors = [sortDescriptor]

    if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [MyData] {
        for var i = 0 ; i < fetchResults.count  ; i++ {
            objects.append(fetchResults[i])   //Get  data  from database and put in array

        }
    }

}

 func numberOfRowsInTableView(tableView: NSTableView) -> Int {
    getItemsFromDataBase()
    showNames()
    return objects.count
}




func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? {

    let identifier = tableColumn?.identifier
    println(identifier!)

    if let propertyEnum = ArrayDisplayProperty(rawValue: identifier!) {
        let cellView = tableView.makeViewWithIdentifier(identifier!, owner: self) as NSTableCellView

        let object = objects[row]

        switch propertyEnum {
        case .Nume:
            cellView.textField!.stringValue = object.nume
        case .Prenume:
            cellView.textField!.stringValue =  object.prenume
        case .Varsta:
            cellView.textField!.stringValue = "\(object.varsta)"
        case .Localitate :
            cellView.textField?.stringValue = object.localitate
        case .Major:
            cellView.textField?.stringValue = object.major == 1 ? "Yes" : "No"
        }

        println(object.nume)

        return object.varsta
    }

 return 0
}

【问题讨论】:

  • 看我的回答here。

标签: macos swift xcode6


【解决方案1】:

您是否只限制了表格列或文本字段和文本字段单元格列? 这两个值都需要使用模型键路径绑定到表格单元格视图(假设您有具有属性“名称”的实体人员)objectValue.name。 Xcode 显示一些警告“无法解析输入的密钥路径”,但我认为可以忽略。

例如,如果我的实体 Person 只有一个属性 name,我的绑定看起来像下面的数组控制器:

表格视图 -> 表格内容 -> 内容 -> 使用控制器键排列对象绑定到数组控制器

名称列 -> 值 > 使用控制器键 arrangedObjects 和模型键路径 name 绑定到阵列控制器

文本字段 -> 值 -> 使用模型键路径 objectValue.name 绑定到表格单元格视图

文本字段单元格 -> 值 -> 使用模型键路径 objectValue.name 绑定到表格单元格视图

【讨论】:

    【解决方案2】:

    SWIFT 代码:--

    按照在NSTableView 到bindings 中填充数据的步骤:-

    1) 将您的 ArrayController 连接到您的 FileOwner/Appdelegate:-

    2) 选择您的 TableColumns 并绑定到 ArrayController -> mappedObjects -> Key

    3) 现在在您的方法中遵循以下代码:-

    @IBOutlet weak var arrController : NSArrayController!
    
    var yourArray: NSMutableArray = []
    
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application
        var dataArray = [["FirstName": "Debasis", "LastName": "Das"],
            ["FirstName": "Nishant", "LastName": "Singh"],
            ["FirstName": "John", "LastName": "Doe"],
            ["FirstName": "Jane", "LastName": "Doe"],
            ["FirstName": "Mary", "LastName": "Jane"]];
    
    
        for var i = 0; i < dataArray.count; i++
        {
            yourArray.addObject(dataArray[i])
        }
        arrController.rearrangeObjects()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多