LaunchServices: вызывается invalidationHandler - общий лист iOS 8

Наблюдая это сообщение об ошибке в журналах, хотя и не постоянно, примерно в то время, когда я использую SLComposeViewController, чтобы открыть лист обмена Twitter или Facebook. Я не использую какой-либо новый API iOS 8, а просто тестирую существующий код на iOS 8. Я вижу, что у других была эта проблема, и они даже видели сбои при использовании других контроллеров модального представления из Cocoa Touch SDK.

LaunchServices: вызывается invalidationHandler

Есть ли новые меры предосторожности для SLComposeViewController и UIActivityViewController в iOS 8? Что-то еще рассмотреть?


person Kyle Clegg    schedule 10.09.2014    source источник
comment
Тот же журнал просто открывает и закрывает общий лист в iOS 8.0 GM. Пока нет ответа.   -  person Swany    schedule 11.09.2014
comment
То же самое здесь. UIActivityViewController очень глючит.   -  person jjxtra    schedule 11.09.2014
comment
Этот парень понял это для Objective-C... но я не уверен, как следовать его ответу в Swift. stackoverflow .com/questions/25192313/   -  person davidrayowens    schedule 17.09.2014
comment
Посмотрите мой ответ в другой теме: stackoverflow.com/a/25895667/2546659   -  person Andrew    schedule 17.09.2014
comment
Я тоже получал эту ошибку и понял, что она возникает при вызове [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook], а в настройках нет учетных записей facebook. Я просто перестал проверять это, так как он автоматически обрабатывает отсутствие учетных записей и выводит сообщение.   -  person Tom Kincaid    schedule 08.11.2014


Ответы (6)


Добавьте этот код после того, как вы представите свой контроллер представления активности:

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

    presentationController.sourceView = sender; // if button or change to self.view.
}
person Ram G.    schedule 18.09.2014
comment
У меня та же проблема... этот ответ решает проблему сбоя, но все еще получаю LaunchServices: invalidationHandler вызывается в консоли - person Praksha; 26.09.2014
comment
Это ошибка на стороне Apple Проверьте ‹devforums.apple.com/message/1049415#1049415 › , так что не беспокойтесь о предупреждении консоли. - person Ajit Satarkar; 07.11.2014
comment
Я бы буквально никогда, никогда бы не понял этого. Иди Эппл. - person toblerpwn; 01.02.2015
comment
или: PresentationController.barButtonItem = отправитель; - person hyperspasm; 08.02.2015

Глядя на форумы разработчиков: "Это сообщение журнала не указывает на какую-либо ошибку с вашей стороны. "

person Eric    schedule 04.10.2014
comment
Я предполагаю, что вы конкретно имеете в виду этот пост: devforums.apple.com/message/1049415#1049415< /а> - person Richard Venable; 20.11.2014

У меня была аналогичная проблема с UIDocumentInteractionController, где, когда я нажимал снаружи, чтобы закрыть его, или выбирал другое приложение для открытия документа, он аварийно завершал работу с консольным сообщением «LaunchServices: invalideationHandler вызвал» дважды (только с использованием iOS 8) .

Обходной путь — добавить вызов presentOpenInMenuFromRect:inView:animated в основную очередь, т.е.

dispatch_async(dispatch_get_main_queue(), ^() {

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

});
person James    schedule 22.10.2014

Вам также может понадобиться определить файл sourceRect. Я использовал следующий код для отображения SLComposeViewController из 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;
}
person mand    schedule 18.09.2014

Что касается автоматического закрытия (не сбоя): я думаю, что это, вероятно, связано со ссылкой, которой вы пытаетесь поделиться. Я вижу то же самое, когда пытаюсь опубликовать ссылки на музыку (Spotify, SoundCloud,...). Тот же твит сработает, если я заменю ссылку ссылкой на какой-нибудь немедийный контент. Я зарегистрирую это на радаре, чтобы увидеть, было ли это преднамеренным...

person coolio    schedule 27.09.2014

Это избавляет меня от сообщения об ошибке и работает так, как ожидалось. Вы должны избавиться от оператора if, который вызывает "isAvailableForServiceType:"

Это должно выглядеть так. Удачного кодирования.

    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.
    }
person rjm226    schedule 30.10.2014