2016-04-08 4 views
0

У меня есть классы, например:Невозможно привязать к значению NSButton в NSOutlineView

class OTF:NSObject { 
var name:String = "" 
var nameID:Int? = 0 
var identifier:Int = 0 
var isOn:Int! = 1 
var search:Int = 0 
var selected:Bool! = false 

init(name:String, nameID:Int?, identifier:Int) { 
    self.name = name 
    self.nameID = nameID 
    self.identifier = identifier 

}} 

class OTFeature:OTF { 

var selDefault:Int?; 
var parent:OTFType! 

init (name:String, parent:OTFType, nameID:Int?, identifier:Int, selDefault:Int?) { 
    super.init(name: name, nameID: nameID, identifier: identifier) 
    self.selDefault = selDefault 
    self.parent = parent 
}} 

Когда я связываю (в Interface Builder) NSOutlineView tableCellButton.objectValue.name в название NSButton помещенного внутри NSTableCellView, моя кнопка ожидается название: это ОК. Делегат и dataSource работают хорошо.

Но если я хочу, чтобы связать tableCellButton.ObjectValue.isOn или tableCellButton.objectValue.selected значению NSButton я получил ошибку:

[<OTFReview.OTFeature 0x6180000e2b80> valueForUndefinedKey:]: this class is not key value coding-compliant for the key selected.

ответ

1

Ваше свойство «выбрано» является необязательным, поэтому он не может быть связано. Вам необходимо сделать selected property non optional и initialize. Также необходимо указать как динамический.

Попробуйте код ниже и посмотрите, что произойдет.

class 
ViewController: NSViewController { 

    dynamic var 
    selected : Bool = false 

    var 
    x : Bool = true 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     bind("x", toObject: self, withKeyPath: "selected", options: nil) 
     print(x) 
    } 
    @IBAction func 
    Do(_: AnyObject) { 
     selected = !selected 
     print(x) 
    } 
} 
+0

Спасибо! Но почему мне нужно привязать ** выбранный ** к ** x **? –

+0

Это просто образец. В вашем коде tableCellButton.ObjectValue.isOn действует как «x». – Satachito

+0

О, хороший образец! Спасибо! –

Смежные вопросы