2017-06-18 45 views
1

我試圖使用與NSTableView的可可綁定和我有一些問題文本框的參數值的綁定:TextField BindingsNSTableView的綁定不起作用MAC OS斯威夫特

我使用這個代碼,等級:

class Person : NSObject { 
var givenName:String 
var familyName:String 
var age = 0 
var lol = 0 

override init() { 
    givenName = "given" 
    familyName = "family" 
    lol = 36 
    super.init() 
} 

init(givenName:String, familyName:String, age:Int) { 
    self.givenName = familyName 
    self.familyName = givenName 
    self.age = age 
    self.lol = 36 
    super.init() 
} 

和視圖控制器:

class ViewController: NSViewController { 

@IBOutlet weak var tableViewL: NSTableView! 

@IBOutlet var superResultsController: NSArrayController! 

@objc dynamic var array = [Person]() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    array.append(Person(givenName: "sas", familyName: "gfg", age: 10)) 
    array.append(Person(givenName: "sddsgds", familyName: "gfg", age: 10)) 
    array.append(Person(givenName: "uoijh", familyName: "gfg", age: 10)) 
    print(superResultsController.arrangedObjects) 
} 

我發現我不能綁定文本框上我的課的任何變量 - 應用程序崩潰與bad_instruction錯誤。

這裏是我的陣列控制器和表視圖的綁定: NSArrayController的: NSArrayController bindings

表視圖: table view bindings

+0

重複的[Swift綁定不起作用Xcode 6 Beta 5](https://stackoverflow.com/questions/25269436/swift-bindings-wont-work-xcode-6-beta-5)? – Willeke

+0

我試圖複製你的問題,但不能;在[我的項目](http://jmp.sh/28gdbW5)中,複製並粘貼代碼並設置文檔的綁定後,所有事情都按預期工作。 –

+0

@PaulPatterson你正在使用Xcode 9或Xcode 8? –

回答

1

Cocoa綁定是建立在志願的頂部。 KVO使用isa swizzling爲自動KVO通知插入掛鉤。

您必須將這些屬性標記爲動態,以便編譯器不會優化對這些屬性的調用。確保在運行時獲取/設置這些屬性將始終流經實例方法,這對於KVO機器的工作至關重要。

不將這些字段標記爲動態可能看起來有效。在運行時設置綁定時,文本字段將顯式調用該屬性以獲取要顯示的初始值。但對這些屬性所做的任何更改都不會發送KVO通知,並且文本字段不會更新。

如果要正確測試此,代碼添加到viewDidLoad結束:

DispatchQueue.main.asyncAfter(deadline: .now() + 2) { 
    self.array[0].givenName = "Some Name" 
    NSLog("Changed the name") 
} 

運行一次,看到表視圖不會更改名稱時更新。在Person上添加dynamicgivenName並再次運行,驗證表視圖更新。

+0

問題依然存在:爲什麼它沒有'動態'的工作。保羅帕特森和我嘗試了伊格爾斯項目,它的工作原理。我編輯名稱,日誌'數組',名稱已更改。 – Willeke

+0

就像我說的,沒有動態的意味着KVO通知將不會被髮送。當然你的數據仍然會改變。如果你重新加載tableview,它仍然會反映你的新值。 – pfandrade

+0

我編輯了回覆,解釋如何測試動態效果。 – pfandrade