1

由于 NSLocalizedString,我遇到了奇怪的崩溃。-[CFString 保留]:消息发送到已释放的实例 0x3c6ad0。

我确信这是由于 NSLocalizedString 当我用静态字符串替换它时。一切顺利。这是我得到错误的那一行。

[_backButton setTitle:NSLocalizedString(sBackButtonDefaultTitle, nil) forState:UIControlStateNormal];

sBackButtonDefaultTitle 是“返回”。

让它随机的原因是它有时会崩溃,有时不会。

编辑:

sBackButtonDefaultTitle 在头文件中定义

#define sBackButtonDefaultTitle @"Back"

当然,标头会导入到 .m 文件中。

编辑:

更多详细信息...此后退按钮标题在应用程序范围内使用。几乎在每个控制器中。但是,崩溃仅发生在按下某个控制器之后。

此控制器包含一个 Web 视图。如果我点击返回按钮,控制器就会弹出。没有崩溃。但是,如果我用相同的“返回”按钮按下任何控制器,应用程序就会崩溃,并给出我上面说明的错误。

这真的很神秘。我希望有人可以帮我解决它。

4

3 回答 3

1

当然是因为sBackButtonDefaultTitle当你调用NSLocalizedString.

我猜这是一个自动释放的字符串。

您可能需要检查是否启用了 NSZombie。

您可能需要在sBackButtonDefaultTitle创建字符串时保留它,并在NSLocalizedString调用后释放它。

于 2012-04-30T20:28:34.530 回答
0

此崩溃是由于sBackButtonDefaultTitle在您的代码中的该点之前发布的。检查以确保在您拥有它时保留它,并且在该行代码中使用它后释放它。

于 2012-04-30T20:27:46.920 回答
0

使用 NSLocalizedString 的一个很好的理由是为您的应用程序支持多种语言。NSLocalizedString 通常与字符串资源文件配合得很好,这样系统就可以动态地决定它应该用来填充你的 UI 的语言。我从来没有像你那样尝试过使用 NSLocalizedString,但我可以告诉你使用字符串资源文件肯定会起作用。查看Apple 的国际化指南字符串资源文件

希望能帮助到你。

于 2012-04-30T22:11:28.847 回答