Невозможно показать модальный ViewController в iOS7

Я попытался показать системные контроллеры представления (MFMailComposeViewController, TWTweetComposeViewController и т. д.) в виде модального представления.

Но эти контроллеры просмотра не отображаются в iOS 7 (они работают в iOS5, iOS6).

Контроллеры просмотра, созданные мной, появляются в iOS7 (например, HogeViewController).

Я не звоню presentViewController:animated:completion в viewDidLoad или viewWillAppear.

У кого-нибудь есть идея?

Журналы консоли:

init Error Domain = NSCocoaErrorDomain Code = 4097 «Операция не может быть завершена. (Ошибка Cocoa 4097.)»

or

_serviceViewControllerReady: ошибка: Error Domain = NSCocoaErrorDomain Code = 4097 «Операция не может быть завершена. (Ошибка Cocoa 4097.)»

or

Несбалансированные вызовы для начала/завершения перехода внешнего вида для .

TWTweetComposeViewController(не отображается)

TWTweetComposeViewController *viewController = [[TWTweetComposeViewController alloc]init];
viewController.completionHandler = ^(TWTweetComposeViewControllerResult result){
    NSLog(@"Result : %d",result);
};
[self presentViewController:viewController animated:YES completion:NULL];

Бревно

Результат : 0

MFMailComposeViewController (появляется на мгновение и вскоре закрывается)

- (void)send:(NSString*)email{
    if ([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        picker.mailComposeDelegate = self;

        NSArray *toRecipients = @[email];
        [picker setToRecipients:toRecipients];

        [picker setSubject:@"Subject"];
        [picker setMessageBody:@"Body" isHTML:NO];
        [self.navigationController presentViewController:picker animated:YES completion:NULL];
    }
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"error:%@,result:%d",error.description,result);
    }];
}

Бревно

_serviceViewControllerReady: ошибка: Error Domain = NSCocoaErrorDomain Code = 4097 «Операция не может быть завершена. (Ошибка Cocoa 4097.)» Несбалансированные вызовы для начала/конца переходов внешнего вида для . ошибка: (ноль), результат: 0


person Yu Tamura    schedule 24.09.2013    source источник
comment
интересно, не могли бы вы показать свой код?   -  person Woodstock    schedule 24.09.2013
comment
Спасибо за комментарий. Я отредактировал вопрос.   -  person Yu Tamura    schedule 24.09.2013
comment
Можете ли вы попробовать установить анимацию: нет при переходах?   -  person Woodstock    schedule 24.09.2013
comment
Нет никакой разницы в TWTweetComposeViewController. Насчет MFMailComposeViewController, ViewController не появляется и вылетает (EXC_BAD_ACCESS).   -  person Yu Tamura    schedule 24.09.2013
comment
Я столкнулся с точно такой же проблемой, но только на iPhone. У меня с iPad такой проблемы нет. Если я не слышу обратного, я считаю, что это ошибка iOS 7. Если вы установите точку останова в конечном методе делегата, результатом для почтового контроллера будет MFMailComposeResultCancelled.   -  person Ryan    schedule 29.09.2013
comment
Мы видим это только на iPhone 5s, в настоящее время работающем под управлением iOS 7.0.2 (11A501). Компиляция точно такого же кода и запуск его на iPhone 5 не показывают проблему. Сборка была только 32-битной, поэтому в нашем приложении нет 64-битной проблемы. Тем не менее, похоже, что это проблема 32-битной и 64-битной версии на стороне Apple. При компиляции нашего приложения с помощью arm64 эти представления отображаются правильно. Кто-нибудь может подтвердить?   -  person Florian    schedule 30.09.2013
comment
Я получаю такое же поведение в тех же ситуациях, используя UIActivityViewController и SLComposeViewController.   -  person Dima    schedule 01.10.2013
comment
подробности см. в моем ответе   -  person Dima    schedule 01.10.2013
comment
Связанный вопрос с аналогичным ответом: stackoverflow.com/questions/20411489 /   -  person Graham Perks    schedule 24.01.2014


Ответы (10)


Оказывается, проблема проявляется только при настройке UIBarButtons. Если мы используем следующее в нашем 32-битном приложении, работающем на iPhone 5s, у нас возникает проблема:

[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1.0)
                                           forBarMetrics:UIBarMetricsDefault];

Отсутствие этой строки решает проблему. Мы подали радар.

person Florian    schedule 01.10.2013
comment
Спасибо за ответ. Я удалил [[UITabBarItemВнешний вид] setTitlePositionAdjustment:UIOffsetMake(0, -1)]; и исправил эту проблему! - person Yu Tamura; 04.10.2013
comment
Я сообщил об этой проблеме, а также rdar://15165678 - person Alex Pretzlav; 07.10.2013
comment
Это безумие, я аплодирую вам за то, что вы нашли ошибку в коде Apple. - person runmad; 09.10.2013
comment
Та же проблема с QLPreviewController. Настройка titlePosition UIBarButtonItem в версиях ниже 7 устранила мою проблему. - person Ian Hoar; 16.10.2013
comment
У меня был такой же опыт при использовании API внешнего вида UISearchBar. [searchBarApperance setPositionAdjustment:UIOffsetMake(100, 0) forSearchBarIcon:UISearchBarIconClear]; - person Sanjit Saluja; 17.10.2013
comment
Я удалил [[Внешний вид UITabBarItem] setTitlePositionAdjustment:UIOffsetMake(0.0f, -3.0f)]; Собираюсь открыть радар по этому поводу. iPhone5S / iOS 7.0.x / XCode 5.0 - person loretoparisi; 25.10.2013
comment
Мне помог ответ Брэндина Бросемера: создание 64-битной версии решает проблему. - person de.; 13.02.2014

Это проблема, когда вы не компилируете для 64-битной версии (arm64) в настройках вашего проекта. Хотя это не всегда может быть вариантом для некоторых людей, потому что в настоящее время Google Analytics не поддерживает 64-битные устройства.

person Brandyn Brosemer    schedule 22.10.2013
comment
и я ем свои предыдущие слова здесь; была неправильная настройка сборки, и как только это было исправлено, и появилась возможность сборки для 64, эта проблема исчезла. Голосую... ;-) - person wkhatch; 28.01.2014

Возможно, вы сможете избежать этой проблемы с помощью некоторого подкласса. У меня была такая же проблема, и в моем случае виновником был:

[[UISearchBar appearance] setSearchTextPositionAdjustment:UIOffsetMake(15.0f, 0.0f)];

В любом случае я уже использовал подкласс UISearchBar, поэтому я изменил его на:

[[KA_SearchBar appearance] setSearchTextPositionAdjustment:UIOffsetMake(15.0f, 0.0f)];

Это решило проблему для меня. Проверено только на iPhone 5s, iOS 7.0.3.

person Sean Mahan    schedule 13.11.2013
comment
Обнаружен радаром как rdar://15461545 - person Sean Mahan; 14.11.2013

Я получаю такое же поведение в тех же ситуациях. В моем случае это оказалось вызвано использованием селектора внешнего вида setSeparatorInset UITableView. Избавление от этого решило проблему. Это наверняка похоже на ошибку со стороны Apple, но, по крайней мере, есть обходной путь.

Этот вопрос показывает, что кто-то имеет аналогичную проблему и в этом случае избавляется от Селектор внешнего вида UISearchBar исправил это. Значит, что-то не так с некоторыми из этих селекторов UIAppearance.

person Dima    schedule 30.09.2013

Этот пост помог мне найти решение похожей проблемы. Но моя проблема не была связана с панелью вкладок, поэтому я решил поделиться, если кто-нибудь еще наткнется на этот пост:

Модальное окно почты открывалось при нажатии на ячейку таблицы, но тут же закрывалось. В моем случае этот код вызвал проблему:

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont systemFontOfSize:17.0]];

Я удалил его, и все работает!

person SuperRunt    schedule 30.10.2013

В моем случае следующий код вызовет ту же проблему на 64-битной машине или симуляторе. Надеюсь на помощь кому-то, кто столкнулся с этой проблемой.

if ([UITableViewCell instancesRespondToSelector:@selector(setSeparatorInset:)]) {
    [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsZero];
}
person Ken Kuan    schedule 27.12.2013

Эта проблема возникает в iPad air (64-разрядная версия), когда приложение не соответствует архитектуре 64. Проблема, с которой я столкнулся, заключалась в том, что каждый селектор UIAppearance, который пытается использовать UIOffsetMake/UIOffsetZero, не работает должным образом! пример

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0, 1.0) forBarMetrics:UIBarMetricsDefault];

or

    [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsMake(0, 5, 0, 5)];

Я думаю, что это ошибка в коде Apple, и я пробовал несколько вещей, но ничего не работает. Лучше, если вы сможете прокомментировать места, где вы устанавливаете Insets в селекторах UIAppearance.

person Chamira Fernando    schedule 15.01.2014

У меня была такая же ошибка при использовании SLComposeViewController для обмена с Facebook или Twitter с использованием симулятора 64-бит или iPhone 5s, затем я удаляю каждую строку кода, которая использует «внешний вид, например [внешний вид UITableViewCell] или [внешний вид UIBarButtonItem], и каждый запуск в порядке.

person Jaime Leon    schedule 16.01.2014

Я обновил xcode до версии 5.1, и теперь все работает нормально.

person user3427846    schedule 17.03.2014
comment
Не могли бы вы предоставить более подробную информацию? - person bjb568; 17.03.2014

NSXPCConnectionInterrupted = 4097. Я бы попросил ваш код повторить команду, поскольку ошибка выглядит временной.

person LevinsonTechnologies    schedule 13.02.2015