12

OSX 上の Swift でバインディングを使用して簡単なテスト プログラムを実行しています。NSTableView、NSArrayController、およびモデル クラスを使用して、それらを接続しようとしましたが、成功しませんでした。ビルドはコンパイルされますが、すぐに次のエラーが発生します: Thread 1: EXC_BAD_ACCESS(code=1, address = 0x0)

コードは次のようになります:
モデル クラス:

import Foundation

class Name {
   var firstName = "Brook"
   var lastName = "Brooklyn"
}

ビューコントローラー:

import Cocoa

class ViewController: NSViewController {

    dynamic var names = [Name]()  // serves as the content for Array-Controller
                        
    override func viewDidLoad() {
        super.viewDidLoad()

        // populate array
        var name1 = Name()
        var name2 = Name()
    
        names.append(name1)
        names.append(name2)
                                
}

override var representedObject: AnyObject? {
    didSet {
    // Update the view, if already loaded.
    }
                                
}

}

クラス「Name」を使用するようにアレイコントローラーをセットアップし、キー「firstName」と「lastName」を追加しました

ストーリーボードは次のとおりです。

絵コンテ バインディング1 バインディング2

Xcode 6 Beta 5 でバインディングをセットアップすることに成功した人はいますか? どんな助けでも大歓迎です!

ありがとう!

編集: 提案されているように、プロパティに「動的」キーワードを追加してバインディングを有効にしようとしましたが、同じエラーが発生し、機能しません。
また、Cocoa の古い Objective-C サポートを使用するために、NSObject から「Name」クラスをサブクラス化しようとしましたが、バインディングはまだ機能しません!

4

3 に答える 3

17

Beta 5 ではdynamic、KVO/バインディングを機能させるために、プロパティを明示的に設定する必要があります。

dynamic var firstName = "Brook"

詳細については、リリース ノートの動的宣言修飾子のセクションを参照してください。

dynamic キーワードを使用すると、KVO、プロキシ、およびその他の高度な Cocoa 機能を Swift 宣言で確実に動作させることができます。

于 2014-08-13T21:32:48.087 に答える
3

を選択し、そのTable View Cell値をTable Cell View適切な objectValue にバインドする必要があります。感嘆符/警告を取り除く方法はわかりませんが、機能します。

ここに画像の説明を入力

于 2014-12-28T16:57:17.980 に答える