string - stringWithFormat 中的参数数量有限制吗?

标签 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"--> 错误

字符串=“123”-->好的

字符串=“234”-->好的

字符串=“456”-->好的

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

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

最佳答案

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

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

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

此外,如果您通过 NSMutableString 构建字符串,您也许能够追踪到您尝试构建的 HTML 代码中是否存在任何实际中断。

关于string - stringWithFormat 中的参数数量有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091214/

相关文章:

ios - NSString 的不可见字符

ios - 使用 NSString 查找字符所有位置的索引

string - Coq 中字符的单引号表示法?

c++ - 查找其字符可能有多个变体的字符串的所有可能版本

iphone - 在 MkMapView 上隐藏、显示注释

cocoa - 将类型从 id 更改为子类 nsmanagementobject

string - 在 C# 中对字符串执行算术运算

java - 在引号外用逗号分割

cocoa - 如何在build设置中更改 Mac 应用程序的名称?

ios - 哪个 NSCharacterSet 描述了在 tel : URL? 中有效的字符