2014-12-09 6 views
0

Helo!Заполнение NSTableView с использованием массива - таблица привязки

У меня проблема с отображением некоторых данных из массива в 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 
} 
+0

Смотрите мой ответ [здесь ] (https://stackoverflow.com/questions/26330468/nsoutlineview-object-value-is-being-returned-but-only-the-placeholder-title/26331214#26331214). –

ответ

1

имеют ограниченные вы только этот столбец таблицы или также, что столбцы Text Field и Text Field Cell? Оба этих значения должны быть ограничены представлением ячейки таблицы с помощью пути ключа модели (предположим, что у вас есть объект Person с атрибутом 'name') objectValue.name. Xcode показывает, что предупреждение «не может разрешить введенный путь ключа», но я думаю, что его можно игнорировать.

Так например, если у меня есть эта сущность Person только с одним атрибутом name, мои привязки выглядит следующим образом с массивом контроллера:

Table View -> Таблица Материалы -> Материалы -> Привязка к массива контроллера с ключом контроллера arrangedObjects

окнеИМЯстолбец -> Значение> Привязать к контроллеру массива с контроллером ключ arrangedObjects и моделью Key Path name

Text Field -> Значение -> Привязка к таблице Cell View с моделью ключевым путем objectValue.name

Text Field Cell -> Значение -> Привязка к таблице Cell View с моделью ключевой путь objectValue.name

0

SWIFT код: -

Выполните следующие действия для заполнения данных в NSTableView через bindings: -

1) Подключите ArrayController к вашему FileOwner/AppDelegate: -

enter image description here

2) Выберите TableColumns и привязку к ArrayController -> arrangedObjects -> Key

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() 
} 
Смежные вопросы