2013-03-12 4 views
10

meine app eine einfache Datei log.txtFile-Sharing/Datei in einer anderen App senden ("öffnet in" in iOS)

die URL dieser Datei (gesehen in Xcode) genannt machen ist file: // localhost/var/mobile/Applications/ZAHL dER ANWENDUNG /Documents/log.txt

So kann ich diese Datei im Finder sehen ...

ich wollte die "öffnen in" -Funktion, um meine hinzufügen App, um den Benutzer diese Datei (per Mail oder Imessage) zu teilen oder öffnen Sie diese Datei in einer anderen kompatiblen App. Hier

ist, was ich tue:

-(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]; 
} 

Dann wird der Aufruf dieser Funktion:

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

Wenn ich die app laufen, die ich auf dieser „Share“ klicken, aber nichts anhängt außer zeigt mir den Pfad der URL im Log-Fenster ...

ich etwas verpasst ...

Danke

EDIT: endlich funktioniert es auf meinem echten iphone ... es gab keinen Textbetrachter im Simulator !!! -‘

EDIT 2: Es zeigt die Apps, die verfügbar sind (Seiten, stoßen ...), aber stürzt schließlich: (((see here for the crash picture

+0

Bist Du sicher, dass es eine App installiert ist auf Ihrem Gerät, das den Dateityp öffnen kann? –

+0

siehe bearbeiten und bearbeiten 2 in meinem Beitrag –

+0

Öffnen Sie den Breakpoint Navigator, klicken Sie auf das + Zeichen in der unteren rechten Ecke, Exception Haltepunkt hinzufügen, Fertig. Führen Sie die Anwendung erneut aus, und jetzt wird der Debugger beendet, wenn die Ausnahme ausgelöst wird. –

Antwort

0

Hier ist, wie es funktioniert für mich:

! ich habe nur die Deklaration „UIDocumentInteractionController * Document“ in der H-Datei und es funktioniert!

ich weiß wirklich nicht, warum, aber ....

+2

@fzaziz schrieb die richtige Antwort .. Sie sollten es als akzeptiert markieren –

41

es ist eine Speicherverwaltung Problem. der Hauptgrund es Abstürze sind, weil das Objekt nicht ist beibehalten. Deshalb wird das Objekt beibehalten, wenn Sie es in der .h-Datei deklarieren und eine @property für retain schreiben, wenn Sie es zuweisen.

So in Ihrer Interface-Datei (.h) sollten Sie

@property (retain)UIDocumentInteractionController *documentController; 

haben dann in .m (Implementierungsdatei) Sie tun können

@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

Dies behob das Problem für mich. Sollte die akzeptierte Antwort sein. –

+0

Ja danke, das ist es !! –

+0

Irgendeine Idee über meine Frage. http://stackoverflow.com/questions/30613645/add-edit-in-exel-or-edit-photo-extension – Durgaprasad

Verwandte Themen