2014-08-27 12 views
10

Ho usato UIDocumentInteractionController per condividere i file ma apre le opzioni del menu dopo 25 secondi in iOS 8 beta 5 e funziona perfettamente con iOS 7.1.UIDocumentInteractionController richiede molto tempo per mostrare le opzioni

Ho verificato il registro che ho incollato qui sotto

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 

Im non sicuro di quello che è il problema è.

+0

Sto avendo lo stesso problema usando UIActivityViewController per presentare il menu di condivisione.Hai trovato qualche soluzione? – mrdziuban

+0

Ho lo stesso problema con alcuni formati video esotici, file pdf e doc utilizzando UIDocumentInteractionController. Nel mio caso ottengo un avviso di memoria e non sono riuscito a trovare una soluzione fino a quel momento. È male sentire che UIActivityViewController ha lo stesso problema. –

+1

@ user2163024 Non sono riuscito a trovare alcuna soluzione.Sto pensando di aprire il documento nel controller di anteprima di UiDocument dove la condivisione funziona bene – Prashanth

risposta

2

Ho usato UIActivityViewController che non ha mostrato alcun problema. Questo bug è ancora presente in iOS 8 Versione di versione

Quindi vado con la correzione UIActivityViewController.

ho usato TYOpenInAppActivity per mostrare le terze applicazioni parti in 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]; 

È possibile trovare il controller TTOpenInAppActivity nel link qui sotto.

https://github.com/honkmaster/TTOpenInAppActivity

+0

inserisci il tuo codice per favore –

+1

Hai provato ad aprire un file pdf con UIActivityViewController? –

+0

Ho provato. Inoltre, ha passato il renderer di pagine personalizzato agli oggetti di attività. Questo porta l'errore "Attività sconosciuta" anche se gestito correttamente – Stas

1

Il mio workaround finora è quello di utilizzare presentOpenInMenuFromRect invece di presentOptionsMenuFromRect, questo mostrerà meno elementi ma almeno non causa problemi di memoria. L'opzione QuickLook sembra essere buggata anche in iOS 8 beta 5, anche l'anteprima del pdf non funziona, a parte i problemi di memoria del film.

+0

non ha funzionato per me .... invece che UIAcitivityController funzionava, .... – Prashanth

+0

il problema con presentOpenInMenuFromRect è che non mostra le opzioni airdrop, mail e iMessage ... di cui avevo bisogno quindi ho usato UIActivityViewController con utilizzo di attività interne come TTOpenInAppActivity – Prashanth

0

sono in esecuzione in questo con UIActivityViewController, quando si passa in un dizionario di NSData elementi che rappresentano PNG immagini.

Sono stato in grado di velocizzare il rendering del foglio di azione convertendo gli oggetti in istanze UIImage nel metodo 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 è molto veloce in iOS 8. Tuttavia non è possibile aprire le immagini in altre applicazioni terze parti come Instagram, Vintiqu, e così via.

Inoltre, presentOpenInMenuFromRect è molto più veloce di presentOptionsMenuFromRect in iOS 8 (anche iOS 8.0.2). Tuttavia, presentOpenInMenuFromRect non mostra azioni di condivisione.

Desidero fornire agli utenti "Salva immagine, Assegna a contatto, Copia, Stampa, ..." nella visualizzazione condivisione. Quindi, la mia soluzione attuale è altrettanto seguito, :(

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

il problema con la tua risposta è presenteOpenInMenuFromRect non mostra le opzioni come mail, airdrop e iMessage. – Prashanth

1

soluzione semplice: mantenere il UIDocumentInteractionController come variabili View Controller (proprietà o istanza var) e init all'interno viewDidLoad (nel mio caso ho inizializzato senza alcuna parametri) Se il fileURL che vuoi aprire cambia dinamicamente, cambia semplicemente la proprietà UIDocumentInteractionController.URL prima di presentarti

Problemi correlati