Подтвердить что ты не робот

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

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

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

Существуют ли новые меры предосторожности при использовании SLComposeViewController и UIActivityViewController в iOS 8? Что-то еще нужно учитывать?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

dispatch_async(dispatch_get_main_queue(), ^() {

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

});

Ответ 4

Вам также может понадобиться определить 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;
}

Ответ 5

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

Ответ 6

Это избавит меня от сообщения об ошибке и работает так, как ожидалось. Вы должны избавиться от инструкции 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.
    }