Pergunta

Eu quero escrever uma aplicação que pode ter vários documentos em uma única janela através de uma interface com abas. Devo evitar a arquitetura NSDocument (O modelo de aplicativo baseado em documentos Cacau)? Tanto quanto eu posso dizer, ele suporta apenas um ou vários janela por documento mas não vice-versa.

Eu estive lutando com esta questão por um tempo e já construiu grande parte da minha aplicação na arquitetura NSDocument mas eu não consigo descobrir uma boa maneira de vários documentos associados com uma única janela.

EDIT: Eu quero ter janelas de documentos de projeto, além de janelas básicas de documentos. A este nível de complexidade, seria ainda vale a pena cortar a arquitetura NSDocument? Fez escrever a Apple Xcode (que funciona desta forma) usando a arquitetura NSDocument?

Foi útil?

Solução

Eu tentei shoehorning um aplicativo NSDocument em uma única janela com guias interface de alguns anos atrás, e acabou tão frustrado depois de alguns meses eu voltei e reformulado as peças arquitetura documento. Não é impossível, mas você acaba trabalhando em torno de tantos problemas que o resultado final mal se assemelha a um aplicativo NSDocument adequada. É melhor apenas para reescrever os bits que você precisa, do que acabar com um monte de código apenas para subverter os quadros de cacau.

Outras dicas

Eu tenho o mesmo tipo de projeto - diferentes documentos independentes que eu quero presente em uma única janela, com uma barra lateral que permite alternar entre documentos - então eu fiz um pouco de pesquisa eu mesmo.

Eu encontrei apenas uma vantagem interessante pela leitura do CocoaDev documento baseado App Com uma janela para todos os documentos de referência. Parece, de resposta de MikeTrent, que o uso de NSDocument é uma maneira muito viável para ir. Você só precisa subclasse NSDocumentController.

Eu também gosto idéia de Abhi usar uma janela filho sem fronteiras.

Usando uma arquitetura baseada em NSDocument não é necessariamente uma má idéia, neste caso; mas pode exigir um pouco de haquery.

É muito provável que você terá que não só subclasse NSDocument, mas também é mais raramente subclasse irmão NSDocumentController. Uma vez feito isso, deve ser uma simples questão de seqüestrar e chamadas evitar -makeWindowControllers e outros métodos de janela-relacionados, permitindo que você enrole as "janelas" de documentos em qualquer forma que quiser, mas ainda mantêm os benefícios do documento- aplicação baseada.

Outra técnica, que eu não tenho ainda, mas plano tentaram, é ter uma janela sem bordas para cada documento. Este documento de uma forma tem uma janela, que pode ou não ser visível.

Então, tem uma janela invólucro contendo a borda da janela atual, e quaisquer controles para alternar entre os quais janela documento sem margem / janelas são visíveis. O documento janela é uma janela de criança do invólucro, o que garante tanto vai ser ligado quando uma janela é movida / minimizado / fechado / etc.

Para cada janela de documento sem margem, a janela do invólucro tem uma vista espaço reservado que, quando redimensionado, irá redimensionar a janela do documento, e também injetar vista da janela do documento na cadeia de responder (qualquer evento enviado para o ponto de vista de espaço reservado, será enviado a vista da janela do documento antes de ser passado para a vista pai do espaço reservado).

Existem ainda alguns pequenos detalhes para trabalhar fora, mas acho que esta abordagem vai funcionar bem.

scroll top