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

时间:2017-02-21 08:54:38

标签: 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)

上面一行崩溃时出现此错误: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)

1 个答案:

答案 0 :(得分:4)

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

如果是NSLocalizedString(),您可能需要检查所有可用语言版本。

不久前发生在我的一个项目中,除了一个版本以外的所有版本,占位符为%d,其中一个版本为%@,只有当手机进入罪魁祸首。