stringWithFormat中的参数数量是否有限制?

时间:2012-12-30 13:45:41

标签: string cocoa nsstring

我正在尝试使用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。

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

2 个答案:

答案 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 ....