2

У меня возникла странная ошибка с MFMessageComposeViewController в iOS8, которая воспроизводится только в моем собственном приложении. Это влияет на приложение прямо сейчас в App Store, построенном с SDK iOS7, работающим на iOS8, а также с iOS8 SDK на моих собственных тестовых устройствах (iPhone и iPad)Проблемы с MFMessageComposeViewController в iOS8

Проблема в том, что когда я вызываю MFMessageComposeViewController , он показывает мне контроллер без текстового поля или кнопки отправки. Я не изменил свой код между iOS7 и iOS8, поэтому не знаю, почему это происходит. Сам код очень прост:

MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; 
picker.messageComposeDelegate = self; 
[picker setRecipients: @[@"5551112222"]]; 
[picker setBody: @"Test"]; 

[self presentViewController:picker animated:YES completion: ^{ 
    NSLog(@"MFMessageComposeViewController completion handler"); 
}]; 

Это то, что он выглядит следующим образом:

enter image description here

Любые идеи для того, что я могу попробовать для работы вокруг? Я попытался установить textField и получателей в обработчике завершения; попытался вызвать startFirstResponder на самом верхнем контроллере; не повезло. Опять же, это было/отлично работает в iOS7.

EDIT:

Так что я нашел собственный образец кода от Apple для MFMessageComposeViewController по этой ссылке: https://developer.apple.com/library/ios/samplecode/MessageComposer/Listings/MessageComposerViewController_m.html

Когда я построить и запустить это приложение, то MFMessageComposeViewController показывает вверх отлично, и предварительное заполнение номер телефона и текстовые поля также работают. Но когда я копирую свои файлы в свое приложение, сделайте свою раскадровку моей главной раскадрой, нажмите кнопку «Создать SMS», и я вижу ту же самую проблему!

Что здесь происходит? Очень смущенный. Может ли быть какая-то конфигурация в моем собственном приложении, которая предотвращает отображение композитора сообщений правильно?

+0

Вы обновили устройства до последних ios8? потому что этот тип ошибок находится в бета-версии ios8. – Max

+0

Да, это на моих собственных устройствах iOS8, а также несколько разных пользователей моего приложения, которые запускают не-бета-версии iOS8 –

ответ

2

Наконец, после разрыва большинства моих приложений, я смог выяснить проблему. Оказывается, я был перекрытый метод системного UIViewController в категории (вместо подпункта причислять):

@implementation UIViewController (UIViewController_Additions) 
-(BOOL)canBecomeFirstResponder { 
    return YES; 
} 

Это работает отлично до iOS7, но что-то должно измениться внутренне в iOS8 и `MFMessageComposeViewController. Случай с «4-летним взломом, который кусает вас в попку»

Эта практика не поощряется и Apple, согласно этой ссылке (хотя я не мог найти оригинальный источник Apple): https://stackoverflow.com/a/14259595/145552