web-dev-qa-db-ja.com

MFMailComposeViewControllerを使用する場合の問題

トリッキーな問題があります。私のアプリの1つで、ダウンロード数が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.)"

「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];
    }
}
27
Paul Peelen

問題が修正されたかどうかはわかりませんが、最近私のプロジェクトで遭遇しました。

私が行った回避策は、MFMailComposeViewControllerを初期段階で割り当てて開始し、1つの静的変数に保持する、必要なときはいつでも、静的MFMailComposeViewControllerインスタンスを取得して提示することでした。

それは私のために働いているようです、それがあなたのためにも働くことを願っています。

11
exu

aにも同じ問題があり、この修正は私を助けました:

https://Twitter.com/christian_beer/statuses/32129553307756544

「@nathangaskinまあ…それはずっと前のことです:)しかし、正しく覚えていれば、UIAppearanceコードからカスタムフォントを削除した後でも機能しました」

それは私にとってはうまくいきます。

また、2番目のオプションは、表示されている呼び出しを単純にラップすることです。

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

ブロック

5
tt.Kilew

私はまったく同じ問題を抱えています。メッセージ本文の文字列を作成するのにかかる時間まで、それを突き止めたと思います。

コメントの内容

 //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's discuss.", 
                        self.itemToView.kpiName, 
                        [DFSKpiFormatter formatNumberAsString:self.itemToView.currentValue], [self.itemToView determineVarianceLabelText],
                        [self.itemToView determineVariancePercentLabelText], 
                        [DFSKpiFormatter formatNumberAsString:self.itemToView.targetValue]];
4
MonkeyBusiness