EXC_BAD_ACCESS 在带有参数的本地化字符串上崩溃

Kex*_*Kex 9 ios swift

在这里遇到一个只出现在某些手机上的奇怪问题。我有一个自定义的 UIView,我像这样初始化。

let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 4), textAlignment: .left, customView: headerImageView, alternativeLayout: true)
Run Code Online (Sandbox Code Playgroud)

上面的行因此错误而崩溃: Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x4)

我在 init.d 中使用了各种方法。如果我使用带有参数的本地化字符串,它似乎只会崩溃。例如这里的代码没有问题:

let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: NSLocalizedString("quiz-message", comment: ""), textAlignment: .left, customView: headerImageView, alternativeLayout: true)
Run Code Online (Sandbox Code Playgroud)

它崩溃的本地化字符串定义如下:

"quiz-message-parameter" = "You have %d credits left";
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?为什么它只会为带有参数的本地化字符串崩溃?

编辑:

我做了一些调试。此崩溃与警报视图无关。如果我尝试:

let aString = String(format: "You have %d credits left", 4)
        print(astring)
Run Code Online (Sandbox Code Playgroud)

它不会崩溃。但是当它与本地化字符串混合时它会崩溃:

let aString = String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 3)
Run Code Online (Sandbox Code Playgroud)

Lar*_*rme 9

变量占位符错误的格式会导致EXC_BAD_ACCESS.

在 的情况下NSLocalizedString(),您可能需要检查所有可用语言的所有版本。

不久前在我的一个项目中发生了这种情况,对于除一个之外的所有版本,占位符都是%d,而在一个版本中%@,只有当手机进入罪魁祸首语言时才会导致崩溃。