1

MFMailComposeViewControllerを使用して電子メールを作成しようとしていますが、テーブルを描画するHTML文字列を使用しています。265個の引数があるので、次のように渡す必要があります。

[mailViewController setMessageBody:
[NSString stringWithFormat:NSLocalizedString(@"EMAIL_HTML_KEY", nil),

                                                date,

                                                object.foo[0],

                                                [object.bar[0] objectAtIndex:0],

                                                [object.bar[0] objectAtIndex:1], ... ...

アプリを実行すると、常にEXC_BAD_ACCESSエラーでハングします。デバッガーに表示されるリストによると、NSDescriptionWithLocaleFuncの後にobjc_msgSendで停止するだけなので、文字列に問題があることは明らかです。事は...ありません。両方の部分(文字列自体と引数のリスト)を再確認したところ、問題はなかったので、文字列を切り取って問題の場所を確認しようとしましたが、文字列が十分に大きい場合にのみエラーが発生することがわかりました。

String="123456"->エラー

String = "123"-> OK

String = "234"-> OK

String = "456"-> OK

したがって、HTML文字列は適切にフォーマットされており、引数のリストは正しいようです。私が想像できる唯一のことは、stringWithFormatで作成されたNSStringに送信できる引数の数に制限があるということです。正しいですか?文字列を分割しますが、HTMLコードであるため、単一の文字列としてmailViewControllerに渡す必要があります。

なにか提案を?。何が足りないの?

4

2 に答える 2

1

クラッシュは、巨大なフォーマット文字列( " [object.bar[0] objectAtIndex:222]"など)に渡されるランダムなアイテムの1つが、フォーマット文字列が予期していなかったオブジェクトであることが原因である可能性があります。

NSMutableString「appendFormat:」または「appendString:」メソッドを介して「」オブジェクトを使用してHTMLを作成し、完全に作成された文字列を「 [mailViewController setMessageBody: ]」に渡してみませんか。

NSLocalizedStringを介してフェッチされた潜在的に簡単に破壊されるフォーマット文字列を介して不変のNSStringをインスタンス化しようとするよりも、はるかにクレイジーではないようです。

さらに、NSMutableStringを介して文字列を作成する場合、作成しようとしているHTMLコードに実際の中断があるかどうかを追跡できる可能性があります。

于 2012-12-30T13:52:30.163 に答える
0

あなたのヘッダーのために...いいえ。引数はいくつでも入れることができます。

そして、私は見ることができます

[mailViewController setMessageBody:NSString stringWithFormat:NSLocalizedString

どちらにする必要があります

[mailViewController setMessageBody:[NSString stringWithFormat:NSLocalizedString

また、インデックスは0から1に変更されているように見えるため、appendStringでmutalbeStringを使用する必要があり、ループで実行できます。

于 2012-12-30T14:11:58.773 に答える