25

Vedere questo messaggio di errore nei registri, sebbene non coerentemente, nel periodo in cui utilizzo SLComposeViewController per aprire un foglio di condivisione di Twitter o Facebook. Non sto usando nessuna nuova API di iOS 8, sto solo testando il codice esistente su iOS 8. Vedo che altri hanno avuto questo problema e persino visto crash se si utilizzano altri controller di visualizzazione modale dal Cocoa Touch SDK.LaunchServices: invalidationHandler chiamato - foglio di condivisione iOS 8

LaunchServices: invalidationHandler chiamati

ci sono nuove precauzioni da prendere con SLComposeViewController e UIActivityViewController in iOS 8? Qualcos'altro da considerare?

+0

Vedere lo stesso registro solo aprendo e chiudendo un foglio di condivisione in iOS 8.0 GM. Nessuna risposta ancora. – Swany

+0

La stessa cosa qui. UIActivityViewController è molto buggato. – jjxtra

+0

Questo tizio l'ha capito per Objective-C ... ma non sono sicuro di come seguire la sua risposta in Swift. http://stackoverflow.com/questions/25192313/sharing-via-uiactivityviewcontroller-to-twitter-facebook-etc-causing-crash – davidrayowens

risposta

26

aggiungere questo codice dopo si presenti la tua vista l'attività di controllo:

if ([activityVC respondsToSelector:@selector(popoverPresentationController)]) 
{ 
    // iOS 8+ 
    UIPopoverPresentationController *presentationController = [activityVC popoverPresentationController]; 

    presentationController.sourceView = sender; // if button or change to self.view. 
} 
+0

Ho lo stesso problema ... questa risposta risolve il problema di arresto anomalo ma sto ancora ricevendo "LaunchServices: invalidationHandler chiamato" nella console – Praksha

+4

Questo è un bug lato mela Verifica , quindi non preoccuparti dell'avvertimento della console. –

+0

Non l'avrei mai capito, mai capito. Vai a Apple. – toblerpwn

0

Potrebbe anche essere necessario per definire il sourceRect. Ho usato il seguente codice per visualizzare un SLComposeViewController da un tableView.

if ([controller respondsToSelector:@selector(popoverPresentationController)]) { 
    //get rect for this row in table 
    CGRect frame = [self.tableView rectForRowAtIndexPath:indexPath]; 

    //convert table row frame to view reference 
    CGRect frameInView = [self.tableView convertRect:frame toView:self.view]; 

    [controller popoverPresentationController].sourceRect = frameInView; 
    [controller popoverPresentationController].sourceView = self.view; 
} 
0

Per quanto riguarda l'auto-chiusura (non il blocco): Penso che sia probabilmente legato al legame che si sta tentando di condividere. Sto vedendo la stessa cosa quando provo a pubblicare link musicali (Spotify, SoundCloud, ...). Lo stesso tweet funziona se sostituisco il link con un link ad alcuni contenuti non multimediali. Inserirò il radar su questo per vedere se è intenzionale ...

5

Guardando il developer forums: "Quel messaggio di registro non indica alcun errore da parte vostra."

+0

Immagino che ti riferisci specificamente a questo post: https://devforums.apple.com/message/1049415#1049415 –

2

Avevo un problema simile con un UIDocumentInteractionController, dove quando toccavo esternamente per chiuderlo, o selezionavo un'altra app per aprire il documento, si bloccava con il messaggio di console "LaunchServices: invalideationHandler chiamato" visualizzato due volte (solo utilizzando iOS 8).

Una soluzione è quella di aggiungere la chiamata a presentOpenInMenuFromRect:inView:animated alla coda principale, vale a dire

dispatch_async(dispatch_get_main_queue(), ^() { 

[self.documentInteraction presentOpenInMenuFromRect:theRect inView:self.view animated:YES]; 

}); 
0

Questo elimina il messaggio di errore per me e funziona come previsto. È necessario sbarazzarsi dell'istruzione if che chiama "isAvailableForServiceType:"

Dovrebbe apparire come questo. Buona programmazione.

SLComposeViewController *tweetSheet = [SLComposeViewController 
              composeViewControllerForServiceType:SLServiceTypeTwitter]; 

    [tweetSheet setInitialText:@"Great fun to learn iOS programming at appcoda.com!"]; 
    [self presentViewController:tweetSheet animated:YES completion:nil]; 

    if ([tweetSheet respondsToSelector:@selector(popoverPresentationController)]) 
    { 
     // iOS 8+ 
     UIPopoverPresentationController *presentationController = [tweetSheet popoverPresentationController]; 

     presentationController.sourceView = sender; // if button or change to self.view. 
    } 
Problemi correlati