2016-12-14 8 views
0

바인딩에 대한 이해를 얻으 려하고 xcode에 CPTextView가있는 CPWindow를 설정하고 창과 텍스트 뷰를 해당 콘센트에 바인딩했습니다.이 코드를 KVO와 호환되게하려면 어떻게해야합니까?

텍스트보기가 _xmlContent 인 것처럼 보이려고 노력 중입니다. xcode에서 바인딩을 "위임"으로 설정하고 키 경로를 xmlContent (self.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 

어떻게 키 "xmlContent"호환 코딩 내 AppController가 키 값을해야합니까?

답변

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

당신은 당신이 실행하는 생각의 코드를 실행하고 있는지 확인해야합니다. 한 가지 일반적인 함정은 일부 웹 브라우저가 코드의 캐시 된 사본에 매달려 있기 때문에 테스트중인 브라우저에서 "캐시 사용 안함"옵션을 사용할 수 있도록 설정해야합니다.

그렇지 않은 경우 개발 HTTP 서버의 포트 번호를 변경하고 새 URL에서 페이지를로드하십시오. 이렇게하면 URL이 변경되었으므로 브라우저가 모든 내용을 새로 고칠 수 있습니다.

+0

Safari에서 "캐시 사용 안 함"을 사용할 수 없지만 (지금하십시오!), 캐시 트러스트를 강제하기 위해 몇 가지 트릭을 시도했습니다. Safari에서 모든 캐시를 수동으로 지운 것조차 생각했습니다. 그러나 나는 틀렸어. – Kris

+0

그래, 사파리는 엄청나게 캐시에 집착 할 수있어. Chrome에는 자체적 인 문제가 있지만 개발하는 동안 "개발자 도구가 열려있는 동안 캐시 사용 중지"옵션이 잘 작동하는 것으로 나타났습니다. –

+0

그건 내 새로운 전략이 될 것이다 :) – Kris