2009-07-12 5 views
7

하나의 창에 탭 인터페이스를 통해 여러 문서가 포함될 수있는 응용 프로그램을 작성하고 싶습니다. NSDocument 아키텍처 (Cocoa Document-based Application 템플릿)를 피해야합니까? 내가 말할 수있는 한, 문서 당 하나 이상의 창만 지원하지만 그 반대는 지원하지 않습니다.코코아 단일 창에서 여러 문서

나는 잠시 동안이 질문에 씨름을하고 이미 NSDocument 아키텍처에서 내 응용 프로그램을 많이 구축했지만 단일 창으로 여러 문서를 연결하는 좋은 방법을 알 수 없다.

편집 : 기본 문서 창 이외에 프로젝트 문서 창을 갖고 싶습니다. 이러한 복잡성 수준에서 NSDocument 아키텍처를 해킹 할 가치가 있습니까? Apple이 NSDocument 아키텍처를 사용하여 Xcode (이 방식으로 작동)를 작성 했습니까?

+0

xcode는 실제로 NSDocument를 사용하지만 프로젝트의 여러 탭을 포함하는 창은 단지 하나의 문서 (프로젝트) – cobbal

+1

이며, 코코아 응용 프로그램에서이를 수행하는 방법을 알기 위해 정말 재미있는 도구입니다 F- 스크립트입니다. http://www.fscript.org/ – cobbal

+0

@cobbal : 흥미 롭습니다. 그것은 텍스트 파일이 NSDocuments로 표현되지 않는다는 것을 의미합니까? – titaniumdecoy

답변

3

몇 년 전에 단일 창 탭 인터페이스에 NSDocument 응용 프로그램을 shoehorning하려고 시도했지만 몇 달 후에 좌절하여 문서 아키텍처 조각을 리팩토링했습니다. 불가능하지는 않지만 최종 결과가 적절한 NSDocument 앱과 거의 비슷하지 않은 많은 문제를 해결해야합니다. Cocoa 프레임 워크를 파괴하기 위해 많은 코드를 작성하는 것보다 필요한 비트를 다시 작성하는 것이 좋습니다.

+0

[내 가이드 (http://cutecoder.org/programming/window-multiple-documents/)]에서 읽을 수있는 코드는별로 많지 않습니다. – adib

4

이 경우 NSDocument 기반 아키텍처를 사용하는 것은 좋지 않습니다. 그러나 그것은 아주 약간의 haquery를 필요로 할 것입니다.

NSDocument를 하위 클래스화할 필요가있을뿐만 아니라 형제 하위 클래스 NSDocumentController를 서브 클래 싱하지 않는 경우가 많습니다. 이 작업이 완료되면 -makeWindowControllers 및 다른 윈도우 관련 메소드에 대한 호출을 피하는 간단한 문제 여야합니다. 원하는 방식으로 문서 "windows"를 래핑 할 수 있지만 문서의 이점은 그대로 유지됩니다. 기반 애플리케이션.

2

아직 시도하지 않았지만 계획을 세우는 또 다른 기술은 각 문서에 대해 경계선없는 창이 있어야한다는 것입니다. 이 방법은 하나의 문서에 하나의 윈도우가 있으며,이 윈도우는 보이거나 보이지 않을 수 있습니다.

그런 다음 실제 창 경계를 포함하는 래퍼 창과 경계선없는 문서 창/창 사이를 전환 할 수있는 모든 컨트롤을 사용하십시오. 문서 창은 래퍼의 하위 창으로, 창이 이동/최소화/닫힘/등 할 때 둘 다 연결되도록합니다.

각 경계선없는 문서 창에 대해 래퍼 창에는 크기가 조정되면 문서 창의 크기가 조절되고 응답자 체인에 문서 창의보기가 삽입되는 자리 표시 자보기가 있습니다 (자리 표시 자보기로 전송되는 모든 이벤트는 자리 표시 자의 부모보기로 전달되기 전에 문서 창보기로 전송 됨).

아직 해결할 사소한 세부 사항이 있지만이 방법이 효과적 일 것으로 생각합니다.

+1

매우 흥미로운 제안. – KPM

5

저는 같은 종류의 프로젝트를 가지고 있습니다. 하나의 창에 다른 독립된 문서와 문서를 전환 할 수있는 사이드 바가 있습니다. 그래서 약간의 검색을 수행했습니다.

방금 ​​Cocoadev 's Document Based App With One Window For All Documents을 참조하여 흥미로운 리드를 발견했습니다. MikeTrent의 답변에서 NSDocument를 사용하는 것이 매우 실용적인 방법이라고 나타납니다. NSDocumentController를 하위 클래스 화하면됩니다.

경계없는 자식 창을 사용하는 경우 Abhi's idea도 좋습니다.

+1

첫 번째 링크는 깨졌습니다 – rraallvv

+1

링크가 수정되었습니다. – KPM

관련 문제