Objective-C,NSLocalizedString随机崩溃

时间:2012-04-30 20:22:16

标签: iphone objective-c nslocalizedstring

由于NSLocalizedString,我遇到了一个奇怪的崩溃。 - [CFString retain]:发送到解除分配的实例0x3c6ad0的消息。

我确信这是由于我将NSLocalizedString替换为静态字符串。一切顺利。这是我收到错误的行。

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

sBackButtonDefaultTitle是“Back”。

它的随机性是它有时崩溃,有时不崩溃。

修改

sBackButtonDefaultTitle在头文件

中定义
#define sBackButtonDefaultTitle @"Back"

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

修改

更多细节......此后退按钮标题在应用程序范围内使用。在几乎每个控制器中。但是,只有在推动某个控制器后才会发生崩溃。

此控制器包含Web视图。如果我点击“返回”按钮,则控制器处于加速状态。没有崩溃。但是如果我用相同的“后退”按钮推动任何控制器,应用程序崩溃,给出上面说明的错误。

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

3 个答案:

答案 0 :(得分:1)

当您致电sBackButtonDefaultTitle时,您NSLocalizedString已被解除分配。

我猜这是一个自动发布的字符串。

您可能需要检查启用NSZombie,以确定。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用NSLocalizedString的一个很好的理由是为您的应用支持多种语言。 NSLocalizedString通常适用于字符串资源文件,因此系统可以使用语言动态决定它应该用于填充UI。我从来没有尝试像你那样使用NSLocalizedString,但我可以告诉你使用字符串资源文件肯定会起作用。看看Apple's Guidelines for Internationalizationstring resource file

希望它有所帮助。