2016-12-14 5 views
0

私はバインディングを把握しようとしていて、xcodeにCPTextViewを設定してCPWindowを設定し、ウィンドウとテキストビューをそれぞれのアウトレットにバインドしました。このコードをKVOに準拠させるにはどうすればよいですか?

私はちょっと固まって、テキストビューに_xmlContentを表示しようとしています。私はxcodeのバインドを "delegate"に設定し、キーパスはxmlContentself.xmlContentと_xmlContentとそのすべてのバリエーションについて考えてみました)に設定しました。

@import <Foundation/Foundation.j> 
    @import <AppKit/AppKit.j> 

    @implementation AppController : CPObject 
    { 
     @outlet CPWindow theWindow; 
     @outlet CPTextView codeView; 

     CPString _xmlContent @accessors(property=xmlContent); 
    } 

    // ... 

    @end 

私は今取得していたメッセージは次のとおりです。

CPUndefinedKeyException: <AppController 0x00a177> is not key value coding-compliant for the key xmlContent 

は、どのように私は私のAppControllerキー値がキー「xmlContent」のために準拠したコーディングするのですか?

答えて

1

コードが正しいように見えます。私はそれを自分自身を再作成し、それが私のために正常に動作します:

@implementation AppController : CPObject 
{ 
    @outlet CPWindow theWindow; 

    CPString _xmlContent @accessors(property=xmlContent); 
} 

- (void)applicationDidFinishLaunching:(CPNotification)aNotification 
{ 
} 

- (void)awakeFromCib 
{ 
    [theWindow setFullPlatformWindow:YES]; 
    [self setXmlContent:@"kitten"]; 

Xcode settings showing delegate binding to xmlContent

Safari showing binding working

あなたは、あなたが実行していると思うのコードを実行していることを確認する必要があります。ここでの一般的な落とし穴の1つは、一部のWebブラウザが実際にコードのキャッシュされたコピーにハングアップするのが好きなので、どのブラウザでも「キャッシュを無効にする」オプションが有効になっていることを確認してください。

それ以外の場合は、開発用HTTPサーバーのポート番号を変更し、新しいURLからページをロードします。これにより、URLが変更されたため、ブラウザはすべての新しいコピーを取得します。

+0

私はSafariで「キャッシュを無効にする」を有効にしていませんでしたが(今やってください!)、キャッシュを破棄するためのいくつかのトリックを試しました。私はSafariのすべてのキャッシュを手動でクリアしたと思っていましたが、私は間違っていたと思います。 – Kris

+0

ええええええええええええええええええええええええええええええええええええええええええ、 Chromeには独自の問題がありますが、開発中に「開発者用ツールが開いている間はキャッシュを無効にする」オプションが非常にうまく動作することがわかりました。 –

+0

それは私の新しい戦略になります:) – Kris

関連する問題