2013-03-12 8 views
10

mia app fare un semplice file chiamato log.txtFile sharing/inviare file in un'altra applicazione ("Apri in" in iOS)

l'URL di questo file (visto in Xcode) è file: // localhost/var/mobile/Applications/NUMERO dELLA DOMANDA /Documents/log.txt

così posso vedere questo file nel Finder ...

ho voluto aggiungere il "Apri in" funzione per il mio app per fornire all'utente la condivisione di questo file (via mail o immagine) o aprire questo file in un'altra app compatibile.

Ecco quello che faccio:

-(void) openDocumentIn { 

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:docFile]; //docFile is the path 
//NSLog(@"%@",fileURL); // -> shows the URL in the xcode log window 

UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL]; 
documentController.delegate = self; 
documentController.UTI = @"public.text"; 
[documentController presentOpenInMenuFromRect:CGRectZero 
             inView:self.view 
            animated:YES]; 
} 

Poi la chiamata a questa funzione:

-(IBAction)share:(id)sender { 
    [self openDocumentIn]; 
} 

Quando eseguo l'applicazione, clicco su questo pulsante "Condividi", ma niente accoda ad eccezione mi mostra il percorso del URL nella finestra di log ...

ho perso qualcosa ...

Grazie

EDIT: finalmente, funziona sul mio vero iphone ... non c'era il visualizzatore di testo nel simulatore !!! -'

EDIT 2: mostra le applicazioni che sono disponibili (pagine, bump ...), ma si blocca infine: (((see here for the crash picture

+0

Sei sicuro che c'è un app installata sul tuo dispositivo che può aprire il tipo di file? –

+0

vedere modifica e modifica 2 nel mio post –

+0

Aprire il Breakpoint Navigator, fare clic sul segno + nell'angolo in basso a destra, Aggiungi punto di interruzione eccezione, Fine. Esegui nuovamente l'applicazione e ora il debugger si fermerà quando viene lanciata l'eccezione. –

risposta

0

Ecco come funziona per me:

! ho appena messo la dichiarazione "UIDocumentInteractionController * documentController" nel file .h e funziona!

io davvero non so perché, ma ....

+2

@fzaziz ha scritto la risposta corretta .. dovresti contrassegnarlo come accettato –

41

e 'un problema di gestione della memoria. il motivo principale è si blocca perché l'oggetto non lo è mantenuto. Ecco perché se lo dichiarate nel file .h e scrivete una @property per la conservazione quando lo assegni, l'oggetto viene mantenuto.

Quindi nel tuo file di interfaccia (h) si dovrebbe avere

@property (retain)UIDocumentInteractionController *documentController; 

Poi, nel tuo .m (file di implementazione) si può fare

@synthesize documentController; 

- (void)openDocumentIn{ 

    // Some code here 

    self.documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL]; 
     documentController.delegate = self; 
    documentController.UTI = @"public.text"; 
    [documentController presentOpenInMenuFromRect:CGRectZero 
            inView:self.view 
           animated:YES]; 
    // Some more stuff 
} 
+1

Questo ha risolto il problema per me. Dovrebbe essere la risposta accettata. –

+0

Sì grazie, questo è stato !! –

+0

Qualche idea sulla mia domanda. http://stackoverflow.com/questions/30613645/add-edit-in-exel-or-edit-photo-extension – Durgaprasad