Estoy haciendo varios documentos locos dentro de una sola ventana con la arquitectura basada en documentos y estoy hecho en un 95%.¿Cómo inspeccionar la cadena de respuesta?
Tengo esta arquitectura de documentos de dos niveles, donde un documento principal se abre y configura la ventana, proporcionando una lista de documentos "secundarios". Cuando el usuario selecciona uno de los elementos secundarios, ese documento se abre con el mismo controlador de ventana y coloca un NSTextView
en la ventana. La asociación de documentos del controlador de ventana se cambia para que el "punto editado" y el título de la ventana rastreen el documento seleccionado actualmente. Piense en un proyecto de Xcode y qué sucede cuando edita diferentes archivos en él.
Para poner el código en pseudo formulario, se invoca un método como este en el documento principal cuando se abre un documento secundario.
-(void)openChildDocumentWithURL:(NSURL *)documentURL {
// Don't open the same document multiple times
NSDocument *childDocument = [documentMapTable objectForKey:documentURL];
if (childDocument == nil) {
childDocument = [[[MyDocument alloc] init] autorelease];
// Use the same window controller
// (not as bad as it looks, AppKit swaps the window's document association for us)
[childDocument addWindowController:myWindowController];
[childDocument readFromURL:documentURL ofType:@"Whatever" error:NULL];
// Cache the document
[documentMapTable setObject:childDocument forKey:documentURL];
}
// Make sure the window controller gets the document-association swapped if the doc came from our cache
[myWindowController setDocument:childDocument];
// Swap the text views in
NSTextView *currentTextView = myCurrentTextView;
NSTextView *newTextView = [childDocument textView];
[newTextView setFrame:[currentTextView frame]]; // Don't flicker
[splitView replaceSubview:currentTextView with:newTextView];
if (currentTextView != newTextView) {
[currentTextView release];
currentTextView = [newTextView retain];
}
}
Esto funciona, y sé que el controlador de ventana tiene la asociación documento correcta en ningún momento desde el punto de cambio y el título siguen lo que estoy documento edición.
Sin embargo, cuando presiono guardar, (CMD + S, o Archivo -> Guardar/Guardar como) quiere guardar el documento principal, no el documento actual (según lo informado por [[NSDocumentController sharedDocumentController] currentDocument]
y como lo indica el título de la ventana y cambiar el punto).
De la lectura de la documentación NSResponder
, parece que la cadena debe ser la siguiente:
Vista actual -> Superview ( repetición) -> Ventana -> WindowController -> Documento -> DocumentController -> Aplicación.
No estoy seguro de cómo la arquitectura basada en documentos está configurando la cadena de respuesta (es decir, cómo está colocando NSDocument
y NSDocumentController
en la cadena) así que me gustaría depurarla, pero no estoy seguro de dónde buscar. ¿Cómo accedo a la cadena de respuesta en un momento dado?
Gracias, no sé cómo no se me había ocurrido eso, estaba tan concentrado en la idea de buscar directamente toda la pila de una vez. – d11wtq