EXC_BAD_ACCESS在带参数的本地化字符串上崩溃
在这里遇到一个奇怪的问题,只出现在某些手机上。 我有一个自定义的UIView,我最初是这样的。
let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 4), textAlignment: .left, customView: headerImageView, alternativeLayout: true)
上面的行崩溃时出现此错误: Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x4)
我在init中使用了各种方法。 如果我使用带参数的本地化字符串,它似乎只会崩溃。 例如,这里的代码没有问题:
let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: NSLocalizedString("quiz-message", comment: ""), textAlignment: .left, customView: headerImageView, alternativeLayout: true)
崩溃的本地化字符串定义如下:
"quiz-message-parameter" = "You have %d credits left";
我在这做错了什么? 为什么只有带参数的本地化字符串崩溃?
编辑:
我做了一点调试。 此崩溃与警报视图无关。 如果我尝试:
let aString = String(format: "You have %d credits left", 4) print(astring)
它没有崩溃。 但当它与本地化字符串混合时,它会崩溃:
let aString = String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 3)
具有错误占位符的格式的变量会导致EXC_BAD_ACCESS
。
对于NSLocalizedString()
,您可能希望检查所有可用语言的所有版本。
它不久前发生在我的一个项目中,除了一个版本之外的所有版本,占位符是%d
,而在一个版本中它是%@
,只有当手机进入罪魁祸首语言时才会导致崩溃。