我正在尝试使用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” - >行
String =“234” - >行
String =“456” - >行
因此,似乎HTML字符串格式正确且参数列表正确。我唯一可以想象的是,我可以发送到使用stringWithFormat创建的NSString的参数数量有限制。这样对吗?。我会拆分字符串但是,作为HTML代码,我必须将它作为单个字符串传递给mailViewController。
有什么建议吗?我错过了什么?。
答案 0 :(得分:1)
您的崩溃很可能是因为传递给巨大格式字符串的其中一个随机项(例如“[object.bar[0] objectAtIndex:222]
”)将是格式字符串不期望的对象。
为什么不使用“NSMutableString
”对象,通过“appendFormat:”或“appendString:”方法撰写HTML,然后将完全构造的字符串传递给“[mailViewController setMessageBody: ]
”
似乎比尝试通过NSLocalizedString提取的可能容易被破坏的格式字符串来实例化不可变的NSString要少得多。
另外,如果您通过NSMutableString构建字符串,那么您可能能够追踪到您尝试构建的HTML代码中是否存在任何实际中断。
答案 1 :(得分:0)
为你的标题......没有。你可以放任意数量的论点。
我可以看到
[mailViewController setMessageBody:NSString stringWithFormat:NSLocalizedString
哪个应该是
[mailViewController setMessageBody:[NSString stringWithFormat:NSLocalizedString
你应该使用带有appendString的mutalbeString并且循环可以这样做,因为你的索引被视为从0变为1 ....