NSLocalizedStringFromTable崩溃

时间:2010-02-04 09:38:12

标签: iphone internationalization crash nszombie

我使用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进行另一次调用。

1 个答案:

答案 0 :(得分:0)

最终在其他地方发现了问题:通过NSLocalizedStringFromTable获得的NSString后来被释放虽然没有完成保留。有趣的是,崩溃发生在系统框架内完全不同的类中。 因此,似乎过度释放是最重要的原因。