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

Проблема при использовании MFMailComposeViewController

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

Проблема заключается в следующем: В представлении, где пользователь может обмениваться списком по электронной почте, я открываю почтовое окно с помощью MFMailComposeViewController. Однако в некоторых случаях приложение, похоже, создает проблему с использованием почтового композитора. Пользователь нажимает кнопку совместного доступа, почтовые окна соскальзывают, ждет около 1-2 секунд, а затем снова закрывается. Нет содержимого в почтовом окне, хотя я отправляю ему данные. Я сам не смог воссоздать проблему на любом устройстве или в симуляторе, однако у одного коллеги есть. Я запустил приложение с помощью XCode на своем телефоне и получил следующее в журналах:

2013-03-01 14:43:39.604 appname[318:907] <MFMailComposeRemoteViewController: 0x1ebfb100> timed out waiting for fence barrier from com.apple.MailCompositionService
2013-03-01 14:43:39.631 appname[318:907] viewServiceDidTerminateWithError: Error Domain=XPCObjectsErrorDomain Code=2 "The operation couldn’t be completed. (XPCObjectsErrorDomain error 2.)"

Я искал ошибку Google, приурочен к ожиданию барьера ограждения из com.apple.MailCompositionService, но не может найти никакой помощи.

Есть ли у кого-нибудь опыт в этом? Как я могу его решить?

Мой код для открытия представления:

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

        [picker setSubject:@"Lista"];

        NSString *emailBody = aBody;
        [picker setMessageBody:emailBody isHTML:NO];

        [self.navigationController presentModalViewController:picker animated:YES];
    }
    else
    {
        [[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Din enhet är inte redo att skicka e-post. Kontrollera dina inställningar", nil)
                                   message:nil
                                  delegate:self
                         cancelButtonTitle:NSLocalizedString(@"OK", nil)
                         otherButtonTitles:nil]
         show];
    }
}
4b9b3361

Ответ 1

Не уверен, что исправлена ​​проблема, но я недавно встретил ее в своем проекте.

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

Кажется, я работаю для меня, надеюсь, что это сработает и для вас.

Ответ 2

a имел ту же проблему, и эта фиксация помогла мне:

https://twitter.com/christian_beer/statuses/321295533077565440

"@nathangaskin хорошо... это было давно:) Но если я правильно помню, это сработало после того, как я удалил пользовательские шрифты из кода UIAppearance"

Это отлично работает для меня.

Кроме того, вторым вариантом является просто перенос отображения вызова в

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

блок

Ответ 3

У меня точно такая же проблема. Я думаю, что я прибил его до времени, необходимого для формулировки строкой тела сообщения.

Содержание комментария

 //Message Body 
NSString *msgBody = [NSString stringWithFormat:
                        @"I noticed these results in pocketKPI. The %@ was at %@ which is a variance of %@(or %@) to the target defined as %@. When you have some time let discuss.", 
                        self.itemToView.kpiName, 
                        [DFSKpiFormatter formatNumberAsString:self.itemToView.currentValue], [self.itemToView determineVarianceLabelText],
                        [self.itemToView determineVariancePercentLabelText], 
                        [DFSKpiFormatter formatNumberAsString:self.itemToView.targetValue]];