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

stringWithFormat中的参数数量是否有限制?,string,cocoa,nsstring,String,Cocoa,Nsstring,我试图用MFMailComposeViewController编写一封电子邮件,我使用一个HTML字符串来绘制一个表格。它有265个参数,所以我必须这样传递它: [mailViewController setMessageBody: [NSString stringWithFormat:NSLocalizedString(@"EMAIL_HTML_KEY", nil), date,

我试图用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_访问错误。根据调试器中显示的列表,它只在NSDescriptionWithLocaleFunc之后的objc_msgSend处停止,因此很明显我的字符串有问题。问题是。。。没有。我仔细检查了这两个部分(字符串本身和参数列表),它们都正常,所以我尝试剪切字符串以查看问题所在,我发现只有当字符串足够大时才出现错误

String=“123456”-->错误

String=“123”-->正常

String=“234”->OK

String=“456”-->正常

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


有什么建议吗?。我遗漏了什么?

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

为什么不通过“appendFormat:”或“appendString:”方法使用“
NSMutableString
”对象编写HTML,然后将完整构造的字符串传递给“
[mailViewController setMessageBody:

似乎比尝试通过NSLocalizedString获取的可能容易破坏的格式字符串实例化不可变NSString要简单得多


另外,如果您通过NSMutableString构建字符串,您可能能够跟踪您试图构建的HTML代码中是否存在任何实际中断。

您的崩溃可能是因为其中一个随机项被传递到了巨大的格式字符串(例如“
[object.bar[0]objectAtIndex:222]
”)将是格式字符串不期望的对象

为什么不通过“appendFormat:”或“appendString:”方法使用“
NSMutableString
”对象编写HTML,然后将完整构造的字符串传递给“
[mailViewController setMessageBody:

似乎比尝试通过NSLocalizedString获取的可能容易破坏的格式字符串实例化不可变NSString要简单得多


另外,如果您通过NSMutableString构建字符串,您可能能够跟踪您试图构建的HTML代码中是否存在任何实际中断。

对于标题。。。不可以。您可以输入任意数量的参数

我看得出来

[mailViewController setMessageBody:NSString stringWithFormat:NSLocalizedString
应该是哪一个

[mailViewController setMessageBody:[NSString stringWithFormat:NSLocalizedString

您应该将mutalbeString与appendString一起使用,循环也可以,因为您的索引被视为从0更改为1….

头。。。不可以。您可以输入任意数量的参数

我看得出来

[mailViewController setMessageBody:NSString stringWithFormat:NSLocalizedString
应该是哪一个

[mailViewController setMessageBody:[NSString stringWithFormat:NSLocalizedString

您应该将mutalbeString与appendString一起使用,循环也可以,因为您的索引从0变为1…

谢谢Michael。你说得对。使用NSMutableString似乎是更好的方法。然而,正如我所说的,HTML代码的每一部分都能正常工作,所以我认为意外对象不是问题所在(此外,它们都是相同的类型)。我要试试可变字符串,看看是否能追踪到发生了什么。现在,这很奇怪。我已经按照你说的做了,把这个大字符串分成三个独立的字符串,每个字符串都有自己的参数。然后将这三个字符串合并成一个预先填充的HTML字符串,并将其传递给邮件生成器。现在一切都好了。不过,我不知道是什么错误。谢谢迈克尔。你说得对。使用NSMutableString似乎是更好的方法。然而,正如我所说的,HTML代码的每一部分都能正常工作,所以我认为意外对象不是问题所在(此外,它们都是相同的类型)。我要试试可变字符串,看看是否能追踪到发生了什么。现在,这很奇怪。我已经按照你说的做了,把这个大字符串分成三个独立的字符串,每个字符串都有自己的参数。然后将这三个字符串合并成一个预先填充的HTML字符串,并将其传递给邮件生成器。现在一切都好了。不过,我不知道错误是什么。谢谢你的帮助。现在清楚了。那时一定有什么地方出错了。我已经更正了错误,再次感谢。再次感谢。现在清楚了。那时一定有什么地方出错了。我已经更正了打字错误,再次谢谢你。我在这里怀疑。你回答了问题,但Michael的回答对我解决问题更有用,所以…:最后,我接受了你的回答,给了迈克尔一个+1分好。我在这里怀疑。你回答了问题,但Michael的回答对我解决问题更有用,所以…:最后,我接受了你的回答,给了迈克尔一个+1分