2016-12-14 2 views
0

Ich versuche Bindings in den Griff zu bekommen und habe ein CPWindow mit einem CPTextView in xcode eingerichtet und das Fenster und die Textansicht an die entsprechenden Ausgänge gebunden.Wie mache ich diesen Code KVO-konform?

Ich bin ein bisschen fest, aber versuchen, die Textansicht die _xmlContent anzuzeigen. Ich habe die Bindung in xcode auf "delegieren" und den Schlüsselpfad auf xmlContent (auch ausprobiert self.xmlContent und _xmlContent und alle Variationen davon, die ich mir vorstellen konnte) festgelegt.

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

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

     CPString _xmlContent @accessors(property=xmlContent); 
    } 

    // ... 

    @end 

Die Botschaft, die ich jetzt bekommen habe, ist:

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

Wie mache ich meinen AppController Schlüsselwert für den Schlüssel konforme Codierung „xmlContent“?

Antwort

1

Ihr Code sieht korrekt aus. Ich neu erstellt, es selbst und es funktioniert gut für mich:

@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

Sie sollten überprüfen, ob Sie den Code ausführen Sie denken, Sie ausgeführt werden. Ein häufiger Fehler hier ist, dass einige Web-Browser wirklich gerne an zwischengespeicherten Kopien Ihres Codes hängen, also stellen Sie sicher, dass die Option "Disable Caches" in jedem Browser aktiviert ist, mit dem Sie testen.

Wenn alles andere fehlschlägt, ändern Sie die Portnummer Ihres Entwicklungs-HTTP-Servers und laden Sie die Seite von der neuen URL. Dadurch wird der Browser gezwungen, neue Kopien von allem zu erhalten (weil sich die URL geändert hat).

+0

Während ich in Safari "Disable caches" nicht aktiviert hatte (jetzt tun!), Habe ich einige Tricks versucht, um Cache-Busting zu erzwingen. Ich dachte, ich hätte sogar alle Caches in Safari manuell gelöscht. Aber ich glaube ich lag falsch. – Kris

+0

Yeah Safari kann unglaublich anhänglich sein. Chrome hat seine eigenen Probleme, aber ich habe festgestellt, dass die Option "Cache deaktivieren, während Entwickler-Tools geöffnet sind", während der Entwicklung ziemlich gut funktioniert. –

+0

Das wird meine neue Strategie :) – Kris