NSLocalizedStringFromTableInBundle调用内部内存崩溃

时间:2012-12-17 19:15:41

标签: objective-c cocoa memory localization nsbundle

我打电话给NSLocalizedStringFromTableInBundle这通常有效,所以我知道它有正确的键,表和&参数。捆绑名称。然而,接下来,在应用程序中完成了看似无关的操作X,并且进行了相同的“来自bundle的字符串”调用,我崩溃了。堆栈跟踪仅显示[NSBundle localizedStringForKey:value:table:]

*** -[CFDictionary objectForKey:]: message sent to deallocated instance 0x4e6f2d0

我使用了仪器,它直到撞击本身才显示出任何异常,它确实发现了一个僵尸。

1 0x7a2f840 CFDictionary(mutable)Zombie -1 00:51.528.884 0 Foundation - [NSBundle _initInfoDictionary]

我尝试过的其他事情包括将宏调用替换为使用[NSBundle bundleWithIdentifier:显式加载包。再次,这可以工作,直到其他操作X完成,然后同样崩溃,虽然在这种情况下它是在我添加的加载调用。

    if (![bundle isLoaded])
        [bundle load];

虽然你已经可以告诉它在那一点上不起作用了,因为通常对包的描述是有效的(NSBundle </Users/...blah...framework> (loaded)),但是当它不起作用时,它看起来像这样:

(NSBundle *) $3 = 0x0613f020 NSBundle <(null)> (not yet loaded)

显而易见的答案是,操作X做了一件坏事,但我看不到它会做什么,除了使用它自己的一些自动释放池(10.8)。即使我发表评论,它也会失败。而且,假设我的代码不好,我怎么能以这种非常特殊的方式弄乱内部初始化或加载NSBundle,以便它无法用于本地化?

有没有人见过类似的东西?我真的希望它是我做错的事情,而不仅仅是10.8上的问题(不会发生在10.6,顺便说一下)。

0 个答案:

没有答案