通常は機能する呼び出しがNSLocalizedStringFromTableInBundle
あるため、キー、テーブル、およびバンドル名の適切なパラメーターがあることがわかります。しかし、アプリ内で一見関係のない操作 X が行われ、同じ "string from bundle" 呼び出しが行われると、クラッシュします。スタック トレースには[NSBundle localizedStringForKey:value:table:]
.
*** -[CFDictionary objectForKey:]: message sent to deallocated instance 0x4e6f2d0
私はInstrumentsを使用しましたが、実際にゾンビが見つかるクラッシュ自体まで異常なことは何も表示されません.
1 0x7a2f840 CFDictionary (可変) ゾンビ -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) のいくつかを使用することを除いて、操作 X が行うことは何もわかりません。ただし、それらをコメントアウトしても失敗します。それでも、そこに悪いコードがあったとしましょう。この非常に特定の方法で、内部の init または NSBundle のロードを台無しにして、ローカリゼーションに使用できなくなるにはどうすればよいでしょうか?
誰かがそのようなものを見たことがありますか?10.8の問題だけでなく、間違っていることを本当に望んでいます(10.6では発生しません)。