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

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

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

Viewcontrollers, созданные мной, отображаются в iOS7 (ex.HogeViewController).

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

Есть ли у кого-нибудь идеи?

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

init Ошибка домена = NSCocoaErrorDomain Code = 4097 "Операция не может быть выполнена. (Cocoa ошибка 4097.)"

или

_serviceViewControllerReady: ошибка: Ошибка домена = NSCocoaErrorDomain Code = 4097 "Операция не может быть выполнена. (Cocoa ошибка 4097.)"

или

Небалансные вызовы для перехода на начало/конец для.

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: Error Domain = NSCocoaErrorDomain Code = 4097 "Операция не может быть завершена. (Cocoa ошибка 4097.)" Неуравновешенные вызовы для начала/окончания перехода на внешний вид. Ошибка: (нуль), результат: 0

Ответ 1

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

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

Оставляя эту линию, она работает вокруг проблемы. Мы подали радар.

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

if ([UITableViewCell instancesRespondToSelector:@selector(setSeparatorInset:)]) {
    [[UITableViewCell appearance] setSeparatorInset:UIEdgeInsetsZero];
}

Ответ 7

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

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

или

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

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