2014-07-23 3 views
0

(계획된) WebKit 컨트롤이있는 NSDocument 지향 앱으로 Cocoa (OS X Mavericks)를 시험 중입니다. 모든 문서 형식이 뷰어 또는 기타 인 경우 "새로 만들기"메뉴 명령이 비활성화 된 것으로 나타났습니다. 나는 웹 브라우저를 만들고있어, 앱은 아무것도 편집하지 않아야한다. 그렇지만 새로운 명령을 사용하기 위해서는 앱이 필요하다.뷰어 지향 응용 프로그램에 대해 NSDocument (하위 클래스) 인스턴스를 만들려면 어떻게해야합니까?

나는 무언가를 오버라이드 할 필요가 있다고 생각하지만, 어디에서? 분명한 후보자는 NSDocument 하위 클래스, NSDocumentController 하위 클래스 또는 응용 프로그램 대리자입니다. 첫 번째 것은 현재까지 실제로 가지고있는 유일한 것입니다 (즉, Xcode의 기본 코드에 포함되어 있음).하지만 NSDocument 인스턴스가 새 인스턴스를 만드는 것이 적절하지 않은 것 같습니다. 그래서 이렇게하려면 NSDocumentController 또는 NSApplicationDelgate 하위 클래스를 만들어야합니다.

답변

0

너무 많은 초보자가 RTFM을 완전히 사용하지 않았습니다.

new-document 명령은 NSDocumentController에 의해 처리됩니다. 이 클래스에는 새 문서가 있어야하는 유형을 결정하는 데 사용되는 defaultType 메서드가 있습니다. 기본적으로 "편집기"모드로 설정된 문서 유형의 (정적) 목록에서 첫 번째 유형을 선택합니다. 그렇지 않으면 nil을 반환합니다 (예 : 뷰어 및 유틸리티 앱).

비 편집 응용 프로그램은 NSDocumentController의 하위 클래스를 작성하여 defaultType을 덮어 쓰고 새 문서의 문서 유형을 설명하는 문자열이 아닌 nil 문자열을 반환하여 새 문서를 얻을 수 있습니다. MIME 형식을 사용했는데 UTI (및 확장 기능)도 작동한다고 생각합니다.

그러나 새로운 문제가 있습니다. NSDocumentController은 기본적으로 생성되지 않습니다. 기본 App 설정은 클래스를 무시하고 어쨌든 NSDocumentController 개체를 만듭니다. 이 두 가지 방법이 있습니다. 앱의 첫 번째 NIB에 하위 클래스의 개체를 넣고 주 메뉴 모음에는 하위 클래스의 개체를 넣습니다. 또는 응용 프로그램 위임의 초기화 메소드 중 하나에서 서브 클래스의 새 오브젝트로 document-controller 속성을 직접 설정할 수 있습니다. (기본 문서 기반 프로젝트 템플릿에는 응용 프로그램 대리자 클래스가 포함되어 있지 않으므로이를 작성해야합니다.)

그러나 두 방법 모두 불확실하다고 들었습니다. 이전 응용 프로그램 시작 부분이 NSDocument 시스템에 닿으면 기본 문서 제어기가 만들어져 객체를 차단합니다. 사용자 정의 NSDocumentController 하위 클래스 객체를 어디에 놓아야 하는지를 아는 코코아 전문가가있어 기본 문서 제어기에서 선점 할 수 없습니까?

...

것은 나는 일에 세 번째 단락에서 말을 넣어 시도,하지만하지 않습니다. 나는 "날짜시간MyApp를 [번호 1 : 번호 2가]. XXX 유형은 어떤 NSDocumentClass에 매핑되지 않습니다"가 계속 NSLog 디버그 화면에서 XXXdefaultType에서 반환하는 문자열입니다. MIME 유형과 UTI 모두를 시도했습니다. 나는 지금 당황하다.

+0

내 앱의 지능이 WebKit 컨트롤에 있기 때문에 필자는 'NSDocument' 아키텍처를 포기하고 찢어 버렸다. (그들 사이의 의존성은 잘못된 방식입니다.) 최근 NSDocumentController 서브 클래스를 추가하여 "Open Recent"메뉴를 다시 제어 할 수 있습니다. – CTMacUser

관련 문제