0

txtsファイルからボタンテキストを使用してUIActionSheetを作成します。NSZombieEnabled、NSDebuEnabledをYESに設定し、NSDeallocateZombiesをNOに設定した後、次のメッセージを含むブレークポイントを取得します。

***-[CFString isEqual:]:割り当て解除されたインスタンス0x11fae00に送信されたメッセージ

これは、UIActionSheetをすぐにではなく、3回目または4回目に表示した後に発生します。これが発生したコードは次のとおりです。

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への別の呼び出しを回避することを考えていました。

4

1 に答える 1

0

最終的にどこか別の場所で問題が見つかりました。NSLocalizedStringFromTableを介して取得されたNSStringは、保持が行われていませんでしたが、後でリリースされました。楽しい部分は、クラッシュが完全に異なるクラスのシステムフレームワーク内で発生していたことです。結局、過剰放出が原因だったようです。

于 2010-02-05T13:27:38.857 に答える