2013-03-12 7 views
10

moja aplikacja zrobić prosty plik o nazwie log.txtUdostępnianie plików/wysłać plik w innej aplikacji ("otwarty w" w iOS)

URL tego pliku (patrząc w Xcode) to file: // localhost/var/mobile/Applications/numer zgłoszenia /Documents/log.txt

Tak widzę ten plik w Finderze ...

chciałem dodać „otwórz”, aby w moim aplikacja, aby udostępnić użytkownikowi ten plik (pocztą lub imamem) lub otworzyć ten plik w innej kompatybilnej aplikacji.

Oto co robię:

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

Następnie wywołanie tej funkcji:

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

Kiedy uruchomić aplikację, klikam na przycisk „share”, ale nic nie dołącza wyjątkiem pokazano mi ścieżkę URL w oknie dziennika ...

coś przeoczyłem ...

Dzięki

EDYCJA: w końcu działa na moim prawdziwym iphone ... nie było przeglądarki tekstu w symulatorze !!! -”

EDIT 2: pokazuje aplikacje, które są dostępne (stron, podbić ...) ale w końcu ulega awarii: (((see here for the crash picture

+0

Czy jesteś pewien, że nie jest zainstalowana aplikacja na urządzeniu, które może otworzyć typ pliku? –

+0

patrz edytuj i edytuj 2 w moim poście –

+0

Otwórz Breakpoint Navigator, kliknij znak + w prawym dolnym rogu, Dodaj wyjątek Breakpoint, Gotowe. Ponownie uruchom aplikację, a teraz debugger zatrzyma się po wygenerowaniu wyjątku. –

Odpowiedz

0

Oto jak to działa dla mnie:

! po prostu umieścić deklarację „UIDocumentInteractionController * documentController” w pliku .h i to działa!

ja naprawdę nie wiem, dlaczego, ale ....

+2

@fzaziz napisał poprawną odpowiedź .. powinieneś oznaczyć ją jako zaakceptowaną –

41

jego kwestia zarządzania pamięcią. główną przyczyną tego, że awarie są spowodowane tym, że obiekt nie jest zatrzymany. To dlatego, jeśli zadeklarujesz to w pliku .h i napiszesz właściwość @ do zachowania, gdy ją przypiszesz, obiekt zostanie zachowany.

Więc w pliku interfejsu (.h) należy mieć

@property (retain)UIDocumentInteractionController *documentController; 

Następnie w pliku .m (realizacji) można zrobić

@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

Naprawiono problem dla mnie. Powinna być zaakceptowaną odpowiedzią. –

+0

Tak, dziękuję, to się stało !! –

+0

Każdy pomysł na moje pytanie. http://stackoverflow.com/questions/30613645/add-edit-in-exel-or-edit-photo-extension – Durgaprasad

Powiązane problemy