2016-04-08 5 views
0

ich ein Klassen, wie folgt aus:Kann nicht NSButton Wert in NSOutlineView binden

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

Wenn ich (im Interface Builder) NSOutlineView tableCellButton.objectValue.name zu Titel NSButton innerhalb NSTableCellView platziert binden, hat meine Taste erwartete Titel: es ist OK. Delegate und dataSource funktionieren gut.

Aber wenn ich tableCellButton.ObjectValue.isOn oder tableCellButton.objectValue.selected zu NSButton Wert binden möchten bekam ich einen Fehler:

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

Antwort

1

Ihre ‚ausgewählt‘ Eigenschaft ist optional, so dass es nicht gebunden werden können. Sie müssen ausgewählt Eigenschaft nicht optional und initialisieren. Sie müssen auch ausgewählt Eigenschaft als dynamische.

Versuchen Sie den folgenden Code und sehen Sie, was passiert.

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

Vielen Dank! Aber warum muss ich ** ausgewählt ** an ** x ** binden? –

+0

Es ist nur ein Beispiel. In Ihrem Code fungiert tableCellButton.ObjectValue.isOn als 'x'. – Satachito

+0

Oh, nette Probe! Danke! –