Convertir una aplicación básica de Cocoa a una aplicación basada en documentos

Mi equipo y yo hemos estado trabajando en una aplicación Cocoa existente, no basada en documentos. Esta es nuestra primera aplicación de Cocoa, aunque hemos hecho varias aplicaciones de iOS hasta ahora.

Sin embargo, la aplicación realmente debería estar basada en documentos, así que comencé a tratar de convertirla. Pero las cosas aquí y allá no parecen estar funcionando. Por ejemplo, el elemento de menú Archivo -> Abrir está permanentemente deshabilitado (aunque finalmente conseguí habilitar el elemento de menú Archivo -> Guardar; inicialmente no lo haría). Además, puedo hacer clic en la X roja para cerrar una ventana, aunque el elemento de menú Archivo -> Cerrar está desactivado; sin embargo, cuando cierro la ventana con el botón X, no se invoca el método dealloc en mi implementación NSDocument (SPDocumentInfo). Creé una nueva aplicación basada en documentos de muestra solo para hacer comparaciones; cuando cierro una ventana allí, se invoca el método dealloc de la implementación SPDocument (como era de esperar). Eso me preocupa.

He hecho muchos cambios al proyecto aquí y allá; Incluyen

Made SPDocumentInfo extiende SPDocument de esta manera en el archivo .h:

@interface SPDocumentInfo : NSDocument <NSWindowDelegate>

Implementé lo siguiente en SPDocumentInfo:

- (NSString *)windowNibName {
    return @"SPDocument";
}

- (void)windowControllerDidLoadNib:(NSWindowController *) aController {
    [super windowControllerDidLoadNib:aController];
}

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
    NSString *xml = [self toXml];
    return [xml dataUsingEncoding:NSUTF8StringEncoding];
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
    // will make this work later
    if ( outError != NULL ) {
        *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
    }
    return YES;
}

Editó el archivo .plist para agregar "Tipos de documentos". Entre otras cosas, definió "Cocoa NSDocument Class" = "SPDocumentInfo".

Modificó algunas conexiones en SPDocumentInfo para que coincidan con las conexiones en la aplicación basada en documentos de muestra. Por ejemplo, en SPDocument.nib, el propietario del archivo (que representa SPDocumentInfo) es el delegado de la ventana.

Entonces, me pregunto si hay otros tipos de cosas que podría faltar al convertirme a una aplicación basada en documentos. O, ¿hay alguna guía sobre cómo hacer esto? (He buscado pero no he podido encontrar ninguno). ¿O debería comenzar de nuevo con una nueva aplicación basada en documentos e intentar adaptar todas nuestras cosas a ella? En general, ¿alguien tiene alguna experiencia con esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta