【问题标题】:NSLocalizedStringFromTable crashNSLocalizedStringFromTable 崩溃
【发布时间】:2010-02-04 09:38:11
【问题描述】:

我使用 txts 文件中的按钮文本创建了一个 UIActionSheet。在我将 NSZombieEnabled、NSDebuEnabled 设置为 YES 并将 NSDeallocateZombies 设置为 NO 后,我得到一个带有以下消息的断点:

*** -[CFString isEqual:]: 消息发送到已释放实例 0x11fae00

这发生在第三次或第四次显示 UIActionSheet 之后,而不是立即显示。发生这种情况的代码是:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedStringFromTable( @"text", @"class", @"text" )
                                                        delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
                                                        otherButtonTitles:NSLocalizedStringFromTable( @"text1", @"class", @"text1" ),
                                                            NSLocalizedStringFromTable( @"text2", @"class", @"text2" ),
                                                            NSLocalizedStringFromTable( @"text3", @"class", @"text3" ), nil];
[actionSheet showFromTabBar:self.tabBarController.tabBar]; 
[actionSheet release];

如果我删除 NSDealocateZombies,模拟器中不会再出现崩溃,但我会在控制台中收到警告:

[CFString _cfTypeID]:消息发送到释放的实例

你遇到过这样的问题吗?从资源中重复获取字符串是错误的吗?作为最后一个解决方案,我想将它们放在成员变量中一次,从而避免对 NSLocalizedStringFromTable 再次调用相同的文本。

【问题讨论】:

    标签: iphone internationalization crash nszombie


    【解决方案1】:

    最终在其他地方发现了问题:通过 NSLocalizedStringFromTable 获得的 NSString 后来发布了虽然没有对其进行保留。有趣的部分是崩溃发生在系统框架内部的一个完全不同的类中。 所以看来,过度释放毕竟是原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2021-05-14
      • 1970-01-01
      • 2016-11-09
      • 2018-12-11
      相关资源
      最近更新 更多