2015-07-08 7 views
1

У меня есть объектная программа на C, которая имеет popover со списком дат и двумя кнопками «Готово» и «Отмена». Когда пользователь нажимает дату, а затем сделанную кнопку, popover должен исчезнуть, и должно появиться окно MFMailViewController, заполненное данными с этой даты.MFMailComposeViewController не появится в iOS8

Когда я запускаю программу на iPad с iOS 7, все работает нормально - popover исчезает и появляется почтовый вид с заполненными данными. Когда я запускаю его на iPad с iOS 8.1, popover исчезает, но просмотр почты не появляется.

Используя вывод NSLog, я знаю, что iPad может отправлять электронную почту, правильная дата добирается до метода, объект MFMailViewController существует и проходит мимо строки, которая должна представлять контроллер. Но контроллер не появляется.

Любая помощь с этим была бы оценена, потому что тонны веб-поиска не нашли ничего полезного.

Конец метода:

NSLog(@"about to present the mail view"); 
if ([MFMailComposeViewController canSendMail] == YES){ 
    NSLog(@"can it email YES"); 
} 
else { 
    NSLog(@"can it email NO"); 
} 
NSLog(@"the picker is %@",picker); 
[self presentViewController:picker animated:NO completion:NULL]; 
NSLog(@"leaving method EmailDataFiles"); 

и выход из этого кода:

about to present the mail view 
can it email YES 
the picker is <MFMailComposeViewController: 0x1616ac00> 
leaving method EmailDataFiles 
+0

Почтовый адрес, указанный здесь, является листом UIActionSheet? – Subbu

+0

Нет, это UIPopoverController. –

ответ

0

Я думаю, что это состояние гонки .. dismissPopover на doneButton-действиях Попова erController и presentViewController сборщика сталкиваются.

Можете ли вы попробовать, если ниже будет работать для вас?

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [self presentViewController:picker animated:NO completion:NULL]; 
    }); 
+0

Большое вам спасибо. Мне было интересно, не попал ли я в состояние гонки. Это решило проблему. –

0

Я не знаю, как вы инициализации объект выбора, но это работает для меня , положить внутри, если условие:

if ([MFMailComposeViewController canSendMail] == YES){ 
    NSLog(@"can it email YES"); 
    MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init]; 

    mailViewController.mailComposeDelegate = self; 
    [mailViewController setSubject:@"Subject"]; 
    [mailViewController setMessageBody:@"" isHTML:NO]; 
    mailViewController.modalPresentationStyle = UIModalPresentationFormSheet; 

    [self presentModalViewController:mailViewController animated:YES]; 
} 
+0

Основываясь на том, что я прочитал о сохранении объекта, я изменил объявление объекта MFMailComposeViewController в интерфейсе для этого класса. Инициализация, которую я использую, это: [code] picker = nil; picker = [MFMailComposeViewController new]; picker.mailComposeDelegate = self; [\ code] –

+0

Thats fine с объявлением. Вы пробовали код? – iDilip

+0

Я добавил набор modalPresentationStyle, но это не помогло. CurrentModalViewController устарел в iOS 6. –