2013-07-08 3 views
1

매우 간단한 테스트 프로그램을 만들었습니다. 하나의 단추가 있습니다. 버튼을 클릭하면 레이블이있는 NSPopover이 표시됩니다. 해당 레이블은 별도의 xib 파일에 있으며 자체는 NSViewController입니다.별도의 viewController로 NSPopover를 올바르게 설정하는 방법

목표는 메인 화면에서 버튼을 클릭하면 viewcontroller의 xib 파일이 표시됩니다. 그리고 xib 파일의 레이블은 텍스트가 "작동합니다"로 설정되어 있어야합니다.

글쎄 .. 작동하지만, 이후에 에만 popover의 두 번째로드. 버튼을 처음 클릭 할 때 레이블에는 여전히 이전 기본값이 있습니다. 하지만 두 번째 클릭부터는 "작동합니다". 이 문제의 원인은 무엇입니까? 코드 코드의 그것의 약 5 라인이 저장소에 볼 수 있습니다 ->https://github.com/patchthecode/testtest

답변

1

전화 [mainScreenPopoverViewController view]; 방법 - (void)windowDidLoad인치 그러면 뷰가 메모리로로드됩니다.

전화 [mainScreenPopoverViewController view];이 (텍스트 필드 주소가 0x0으로는) 전에

enter image description here

당신은 모두 함께 IBOutlet에 대한 강한 속성을 사용할 수 없습니다.

@property (nonatomic, strong) IBOutlet NSTextField *textField; 

선언 속성으로 을 정의해야한다 iOS 및 OS X 콘센트에, 실용적인 관점에서 Resource Programming Guide

에서 살펴 보자. 아웃렛은 일반적으로 파일 소유자에서 nib 파일 (또는 iOS에서는 스토리 보드 장면)의 최상위 수준 객체에 이르는 것을 제외하고는 으로 약합니다.

  • 당신은 예를 들어, 뷰 컨트롤러의 뷰의 서브 뷰 또는 창 컨트롤러의 창을 만들 콘센트는, 임의의 참조 개체 사이 안됩니다 : 당신을 콘센트가 있기 때문에, 따라서 일반적으로 약한해야 만들 소유권을 암시합니다.

  • 강력한 콘센트는 프레임 워크 클래스 (예 : UIViewController의 뷰 콘센트 또는 NSWindowController의 콘센트 콘센트)에 의해 지정됩니다.

+0

안녕하세요, 저는 강하고 약한 IBoutlets에 대해 알고 있습니다. 내 오류. 방금이 테스트 앱을 실행하여 코드 위에 팝을 표시했습니다. 한 가지는 솔루션이 작동하지만 이것이 왜 발생했는지에 대한 설명이있는 링크가 있습니까? 펜촉을로드하는 코드가 이미 객체를 메모리에 인스턴스화했다는 믿음이 있습니다. –

+0

중단 점 un IBAction을 사용하고 텍스트 필드의 주소를 확인하십시오. –

+0

나는 브레이크 포인트를 설정 했으므로, 지금 무슨 일이 일어나는지 이해한다. 감사. –