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 处停止,因此很明显我的字符串存在问题。问题是……没有。我仔细检查了这两个部分(字符串本身和参数列表),它们都正常,所以我尝试切断字符串以查看问题出在哪里,我发现只有当字符串足够大时才会出现错误。

字符串="123456" --> 错误

字符串="123" --> 确定

字符串="234" --> 好的

字符串="456" --> 好的

因此,似乎 HTML 字符串格式正确,参数列表也正确。我唯一能想象的是,我可以发送给使用 stringWithFormat 创建的 NSString 的参数数量是有限的。这样对吗?。我会拆分字符串,但作为 HTML 代码,我必须将其作为单个字符串传递给 mailViewController。

有什么建议吗?。我错过了什么?

4

2 回答 2

1

您的崩溃很可能是因为传递给巨大格式字符串(例如“ [object.bar[0] objectAtIndex:222]”)的那些随机项目之一将是格式字符串不期望的对象。

为什么不使用“ 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

您应该使用 mutalbeString 和 appendString 并且可以使用循环,因为您的索引被视为从 0 变为 1....

于 2012-12-30T14:11:58.773 回答