너무 많은 초보자가 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 디버그 화면에서 XXX은 defaultType
에서 반환하는 문자열입니다. MIME 유형과 UTI 모두를 시도했습니다. 나는 지금 당황하다.
내 앱의 지능이 WebKit 컨트롤에 있기 때문에 필자는 'NSDocument' 아키텍처를 포기하고 찢어 버렸다. (그들 사이의 의존성은 잘못된 방식입니다.) 최근 NSDocumentController 서브 클래스를 추가하여 "Open Recent"메뉴를 다시 제어 할 수 있습니다. – CTMacUser