2013-06-22 3 views
3

내가 한 일은 다음과 같습니다.보기 컨트롤러 클래스의 콘센트가 약하거나 길어야합니까? OSX app

  1. 깨끗한 OSX 프로젝트를 만듭니다.
  2. 은 main.xib로 이동하여 popover 컨트롤러를 끌었습니다. 이로써 인터페이스 빌더에서 2 개의 가시 객체가 생성되었습니다.
  3. 내가 appDelegate.h 파일에 가서

    `

    했다 - 속성 (할당) 함께 IBOutlet NSViewController * popVC @;

  4. 가 그때는 방법 applicationDidFinishLaunching: 가서

    했다

    popVC = [NSViewController의 ALLOC] INIT];

결과 : 내가받을 다음과 같은 오류 메시지 : 이미 펜촉에 의해 소유되기 때문에 펜촉에

enter image description here

야해 객체가 약한?

+0

나는 언제나 '강하게'나간다. 나는 '약한'것이 필요한 상황을 찾지 못했고, 대표자들은 'unsafe_unretained'를 사용한다. –

+0

@AnoopVaidya 왜 대표단이 '약하다'고하지 않습니까? – Abizern

+0

@Abizern : 할당이 해제되면 '약함'이 포인터를 '무시'합니다. –

답변

11

콘트롤러보기 콘센트는 strong이어야합니다. NIB는 객체를 소유하지 않으며, 단지 아카이브입니다. 뷰 아웃렛은 일반적으로 weak이어야합니다. 뷰가 슈퍼 뷰에 유지되기 때문에 (슈퍼 뷰는 일반적으로 뷰 컨트롤러에 의해 유지됩니다.)

여담으로

, 당신은 일을해서는 안 :

popVC = [[NSViewController alloc] init]; 

popVC이 언 아카이브되고 있기 때문에, 생성되고 NIB이로드 될 때 설정합니다. 인스턴스를 만들고 설정하여 NIB 버전을 버리는 것입니다. 이것은 모든 콘센트에 적용됩니다 - 콘센트의 목적은 NIB가로드 될 때 채워야 할 목적입니다.

+0

+1 '강한'대답. –

+0

@Wain 나는 이것을 너무 빨리 올바른 것으로 선택했을 것입니다. 마지막으로 한가지 설명 해주시겠습니까? 이 문제는 IB 콘센트의 NSViewController 객체에서만 발생하지 않습니다. 그것은 그들 모두와 함께 발생합니다. 지금 나는 정말로 혼란 스럽다. 샘플 프로젝트를 압축해서 보내 주면 내가 무슨 뜻인지 알 수 있을까요? –

+0

코드를 GitHub에 넣거나 다른 곳으로 업로드하고 여기에 링크를 추가하려면 i'llll을보십시오. – Wain