25

Wyświetlenie tego komunikatu o błędzie w dziennikach, ale niekonsekwentnie, w okresie, w którym korzystam z SLComposeViewController, aby otworzyć arkusz udziału Twittera lub Facebooka. Nie używam żadnego nowego API iOS 8, tylko testuję istniejący kod na iOS 8. Widzę, że inni mieli ten problem, a nawet zauważyli awarie podczas korzystania z innych kontrolerów widoku modalnego z Cocoa Touch SDK.LaunchServices: invalidationHandler o nazwie - iOS 8 udostępnij arkusz

LaunchServices: invalidationHandler nazywa

Czy istnieją nowe środki ostrożności, aby zabrać ze SLComposeViewController i UIActivityViewController w iOS 8? Coś jeszcze do rozważenia?

+0

Zobacz ten sam dziennik po prostu otwierając i zamykając arkusz akcji w iOS 8.0 GM. Brak odpowiedzi. – Swany

+0

To samo tutaj. UIActivityViewController jest bardzo błędny. – jjxtra

+0

Ten facet wymyślił to dla Celu-C ... ale nie jestem pewien, jak śledzić jego odpowiedź w Swift. http://stackoverflow.com/questions/25192313/sharing-via-uiactivityviewcontroller-to-twitter-facebook-etc-causing-crash – davidrayowens

Odpowiedz

26

Dodaj ten kod po zaprezentować swój kontroler widok działalność:

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

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

Mam ten sam problem ... ta odpowiedź rozwiązuje problem powodujący awarię, ale nadal otrzymuję komunikat "LaunchServices: invalidationHandler" w konsoli – Praksha

+4

To jest błąd po stronie Apple Sprawdź , więc nie przejmuj się ostrzeżeniem konsoli. –

+0

Dosłownie nigdy, przenigdy nie odkryłem tego. Idź Apple. – toblerpwn

0

może trzeba także określić sourceRect. Użyłem następującego kodu, aby wyświetlić SLComposeViewController z 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

odniesieniu do automatycznego zamykania (nie katastrofy): myślę, że to prawdopodobnie związane z linkiem, który próbujesz udostępnić. Widzę to samo, gdy próbuję publikować linki muzyczne (Spotify, SoundCloud, ...). Ten sam tweet działa, jeśli zastąpię link linkiem do niektórych treści niemedialnych. Zrobię radar, aby sprawdzić, czy jest to zamierzone ...

5

Patrząc na developer forums: "Ten komunikat nie oznacza żadnego błędu z Twojej strony."

+0

Sądzę, że konkretnie odnosisz się do tego postu: https://devforums.apple.com/message/1049415#1049415 –

2

Miałem podobny problem z UIDocumentInteractionController, gdzie po stuknięciu poza nim, aby go odrzucić, lub wybraniu innej aplikacji do otwarcia dokumentu, nastąpiłaby awaria z "LaunchServices: invalideationHandler zwany" komunikat konsoli wyświetlany dwukrotnie (tylko za pomocą iOS 8).

Rozwiązaniem jest dodanie wywołanie presentOpenInMenuFromRect:inView:animated do głównego kolejce, tj

dispatch_async(dispatch_get_main_queue(), ^() { 

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

}); 
0

ten pozbywa się komunikat o błędzie dla mnie i działa zgodnie z oczekiwaniami. Musisz pozbyć się instrukcji if, która nazywa "isAvailableForServiceType:"

Powinno to wyglądać tak. Szczęśliwe kodowanie.

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. 
    }