由于NSLocalizedString,我遇到了一个奇怪的崩溃。 - [CFString retain]:发送到解除分配的实例0x3c6ad0的消息。
我确信这是由于我将NSLocalizedString替换为静态字符串。一切顺利。这是我收到错误的行。
[_backButton setTitle:NSLocalizedString(sBackButtonDefaultTitle, nil) forState:UIControlStateNormal];
sBackButtonDefaultTitle是“Back”。
它的随机性是它有时崩溃,有时不崩溃。
修改
sBackButtonDefaultTitle在头文件
中定义#define sBackButtonDefaultTitle @"Back"
当然,标题会导入到.m文件中。
修改
更多细节......此后退按钮标题在应用程序范围内使用。在几乎每个控制器中。但是,只有在推动某个控制器后才会发生崩溃。
此控制器包含Web视图。如果我点击“返回”按钮,则控制器处于加速状态。没有崩溃。但是如果我用相同的“后退”按钮推动任何控制器,应用程序崩溃,给出上面说明的错误。
这真的很神秘。我希望有人可以帮我修复它。
答案 0 :(得分:1)
当您致电sBackButtonDefaultTitle
时,您NSLocalizedString
已被解除分配。
我猜这是一个自动发布的字符串。
您可能需要检查启用NSZombie,以确定。
您可能需要在创建时保留sBackButtonDefaultTitle
字符串,并在NSLocalizedString
调用后将其释放。
答案 1 :(得分:0)
此崩溃是由于sBackButtonDefaultTitle
在您的代码中的该点之前被释放。检查以确保在占有它时确保保留它并且在之后在该代码行中使用它。
答案 2 :(得分:0)
使用NSLocalizedString的一个很好的理由是为您的应用支持多种语言。 NSLocalizedString通常适用于字符串资源文件,因此系统可以使用语言动态决定它应该用于填充UI。我从来没有尝试像你那样使用NSLocalizedString,但我可以告诉你使用字符串资源文件肯定会起作用。看看Apple's Guidelines for Internationalization 和string resource file
希望它有所帮助。