2011-05-27 35 views
6

Tengo un UIButton regular en mi menú principal que actualmente inicia un UIViewController; el contenido del archivo .m correspondiente es el siguiente:UIDocumentInteractionController se bloquea al salir

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    documentPath = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"pdf"]; 
    NSURL *targetURL = [NSURL fileURLWithPath:documentPath]; 

    document = [UIDocumentInteractionController interactionControllerWithURL: targetURL]; 
    document.delegate = self; 
    [document retain]; 

    return self; 
} 

-(UIViewController *)documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller 
{ 
    return self; 
} 

-(void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller 
{ 
    [document autorelease]; 
} 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [document presentPreviewAnimated: YES]; // ** CRASH ** 
} 

-(void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

-(void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

-(void)dealloc 
{ 
    [super dealloc]; 
} 

Mis carga el archivo pdf como se esperaba, sin embargo cuando pulsa el botón de "hecho" el documento se cierra y me quedo mirando a mi UIViewController en blanco - posiblemente como esperado. Pero si presiono el botón "volver" de navegación, la aplicación se bloquea con un error de acceso incorrecto dentro de mi método viewDidLoad, donde se encuentra la llamada a presentPreviewAnimated.

Si alguien pudiera echar un vistazo, le estaría muy agradecido.

(por cierto, no hay ningún archivo SEMILLA cuando se crea este controlador de vista. Sí, esto en sí mismo es un error)

+0

Creo que su problema puede ser con la liberación automática que está haciendo en el delegado (junto con la retención en el método initWithNib). – onnoweb

+0

@onnoweb Sin el retener se bloqueará con lo siguiente: Línea 1: - [__ NSCFType presentPreviewAnimated:]: selector no reconocido enviado a instancia 0x1a32e0 Línea 2: *** Aplicación de terminación debido a excepción no detectada 'NSInvalidArgumentException', razón: '- [__NSCFType presentPreviewAnimated:]: selector no reconocido enviado a la instancia 0x1a32e0 'El motivo por el que agregué el retener fue porque Apple nos lo indicó en la referencia del protocolo UIDocumentInteractionControllerDelegate. – Luke

+0

Hmm ... Uso UIDocument bastante en una de mis aplicaciones, no retengo y no tengo problemas. ¿Qué sucede si mueve el código de UIDocument de initWithNib a viewDidLoad? – onnoweb

Respuesta

1

Me pregunto si el problema es que lo haga durante la creación de la vista. De modo que cuando el usuario cierra la vista previa del documento, vuelve a una UIView incompletamente formada. Entonces, ¿quizás primero construya y cargue la vista y luego haga UIDocument desde viewDidAppear?

Cuestiones relacionadas