使用数组 - 绑定表填充NSTableView

时间:2014-12-09 08:41:14

标签: macos swift xcode6

Helo!

我在将一些数据从数组显示到NSTableView时遇到问题。 我将我的信息保存在核心数据中。我把这个信息添加到一个数组中,但是当我尝试在表中添加这个信息时,我收到的所有内容都是一个行数正确的表,但都有相同的隐式文本:" TableView Cell&#34 ;

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

  @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
}

2 个答案:

答案 0 :(得分:1)

您是否仅限制该表列或文本字段和文本字段单元格? 这两个值都需要与表单元格视图一起使用模型键路径(假设您有实体Person,其属性为&#39; name&#39;)objectValue.name。 Xcode显示一些警告&#39;无法解析输入的密钥路径&#39;但我认为可以忽略。

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

表视图 - &gt;表格内容 - &gt;内容 - &gt;使用控制器键arrangeObjects绑定到Array Controller

名称列 - &gt;价值&gt;使用控制器密钥arrangedObjects和模型密钥路径name

绑定到阵列控制器

文字字段 - &gt;价值 - &gt;使用模型关键路径objectValue.name

绑定到表格单元格视图

文本字段单元 - &gt;价值 - &gt;使用模型关键路径objectValue.name

绑定到表格单元格视图

答案 1 :(得分:0)

SWIFT代码: -

按照NSTableViewbindings中填充数据的步骤操作: -

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

enter image description here

2)选择你的TableColumns并绑定到ArrayController - &gt; arrangeObjects - &gt;键

enter image description here

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()
}