2014-08-27 11 views
10

Użyłem UIDocumentInteractionController do udostępniania plików, ale otwiera opcje menu po 25 sekundach w iOS 8 beta 5 i działa dobrze w iOS 7.1.UIDocumentInteractionController ma długi czas, aby wyświetlić opcje

I sprawdzeniu dziennika które wklejone poniżej

Errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo=0x79bd5ef0 {NSLocalizedDescription=query cancelled} 
2014-08-27 15:02:05.634 Localwire[82067:1364165] Unknown activity items supplied: (
     { 
     "com.microsoft.excel.xls" = <d0cf11e0 a1b11ae1 00000000 00000000 00000000 00000000 3e000300 feff0900 06000000 00000000 00000000 10000000 01000000 00000000 00100000 cb070000 01000000 feffffff 00000000 00000000 62000000 e3000000 64010000 e5010000 66020000 e7020000 68030000 e9030000 6a040000 eb040000 6c050000 ed050000 6e060000 ef060000 70070000 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 

Nie jestem pewien, co to jest problem.

+0

Mam ten sam problem, używając UIActivityViewController do przedstawienia menu udostępniania .. Czy znalazłeś jakieś rozwiązanie? – mrdziuban

+0

Mam to samo problem z niektórymi egzotycznymi formatami wideo, plikami pdf i doc za pomocą UIDocumentInteractionController. W moim przypadku dostaję ostrzeżenie o pamięci i nie udało mi się znaleźć rozwiązania. Źle jest usłyszeć, że UIActivityViewController ma ten sam problem. –

+1

@ user2163024 Nie mogłem znaleźć żadnego rozwiązania.Zamierzam otworzyć dokument w kontrolerze podglądu UiDocument, gdzie udział działa dobrze – Prashanth

Odpowiedz

2

Użyłem UIActivityViewController, który nie pokazał żadnego problemu. Ten błąd nadal występuje w wersji iOS 8 Release

Idę z poprawką UIActivityViewController.

Użyłem TYOpenInAppActivity pokazać aplikacje firm trzecich w UIActivityViewController

NSURL *URL = [NSURL fileURLWithPath:filePath]; 
TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andBarButtonItem:barButton]; 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[URL] applicationActivities:@[openInAppActivity]]; 
    // Create pop up 
    self.activityPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController]; 
    // Store reference to superview (UIPopoverController) to allow dismissal 
    openInAppActivity.superViewController = self.activityPopoverController; 
    // Show UIActivityViewController in popup 
    [self.activityPopoverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

można znaleźć kontroler TTOpenInAppActivity w linku poniżej.

https://github.com/honkmaster/TTOpenInAppActivity

+0

dodaj swój kod: –

+1

Czy próbowałeś otworzyć plik pdf z UIActivityViewController? –

+0

Próbowałem. Ponadto przekazał niestandardowy mechanizm renderowania strony do elementów activityItems. Spowoduje to błąd "Nieznany element aktywności", chociaż jest obsługiwany prawidłowo – Stas

1

Moje dotychczasowe obejście polega na użyciu presentOpenInMenuFromRect zamiast presentOptionsMenuFromRect, to pokaże mniej elementów, ale przynajmniej nie powoduje problemów z pamięcią. Opcja QuickLook wydaje się być wadliwa również w wersji iOS 8 beta 5, nie działa również szybki podgląd pdf, oprócz problemów związanych z pamięcią filmową.

+0

to nie działa dla mnie .... zamiast tego UIAcitivityController pracował, .... – Prashanth

+0

problem z presentOpenInMenuFromRect jest to, że nie pokazuje opcji zrzutów, poczty i iMessage ... które potrzebowałem, więc użyłem UIActivityViewController z wykorzystaniem wewnętrznej aktywności jako TTOpenInAppActivity – Prashanth

0

Używam do tego z UIActivityViewController, przechodząc w słowniku NSData przedmiotów, które reprezentują PNG obrazów.

Udało mi się przyspieszyć renderowanie arkusza akcji, konwertując obiekty NSData na instancje UIImage w metodzie activityViewControllerPlaceholderItem:.

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    NSMutableDictionary *itemPlaceholders = [NSMutableDictionary dictionary]; 

    [self.items enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSData *obj, BOOL *stop) { 
     UIImage *placeholderImage = [UIImage imageWithData:obj scale:.5]; 
     [itemPlaceholders setObject:placeholderImage forKey:key]; 
    }]; 

    return itemPlaceholders; 
} 
3

UIActivityViewController jest bardzo szybki w iOS 8. Jednak nie można otworzyć zdjęć w innych aplikacji 3rd party, takich jak Instagram, Vintiqu, i tak dalej.

Ponadto presentOpenInMenuFromRect jest znacznie szybszy niż presentOptionsMenuFromRect w systemie iOS 8 (iOS 8.0.2). Ale presentOpenInMenuFromRect nie pokazuje akcji udostępniania.

Chcę udostępnić użytkownikom "Zapisz obraz, przypisz do kontaktu, kopiuj, wydrukuj ..." w widoku udostępniania. Więc mój obecny obejście jest tak jak poniżej :(

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { 
     [self.udic presentOpenInMenuFromRect:CGRectMake(self.view.frame.size.width/2 - 49/2, self.view.frame.size.height-49, 49, 49) inView:self.view animated:YES]; 
    } else { 
     [self.udic presentOptionsMenuFromRect:CGRectMake(self.view.frame.size.width/2 - 49/2, self.view.frame.size.height-49, 49, 49) inView:self.view animated:YES]; 
    } 
+0

Problem z twoją odpowiedzią jest presentOpenInMenuFromRect nie pokazuje opcji takich jak mail, zrzut i iMessage. – Prashanth

1

Proste rozwiązanie: utrzymać UIDocumentInteractionController jako View Controller zmiennej (własność lub instancja VAR) i init, to wewnątrz viewDidLoad (w moim przypadku inicjowany go bez Jeśli plikURL, który chcesz otworzyć, zmienia się dynamicznie, po prostu zmień właściwość UIDocumentInteractionController.URL przed prezentacją:

Powiązane problemy