3

NSMutableAttributedString をセットアップするためのコードがいくつかあります。

    NSMutableParagraphStyle *centred = [[NSMutableParagraphStyle alloc]init];
    [centred setAlignment:NSCenterTextAlignment];
    NSDictionary *attributes = [[NSDictionary alloc]initWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica bold" size:12],NSFontAttributeName,
                                [NSColor whiteColor],NSForegroundColorAttributeName,
                                [NSColor clearColor], NSBackgroundColorAttributeName, 
                                centred, NSParagraphStyleAttributeName,
                                nil];
    NSMutableAttributedString* attribTitle = [[NSMutableAttributedString alloc]initWithString:@"Foo"];
    [attribTitle setAttributes:attributes range:NSMakeRange(0, [[attribTitle string] length] - 1)];

ほとんど問題なくプロジェクトを開始して以来、アプリの -awakeFromNib メソッドに座っていましたが、今日、Xcode 4.3 でアプリを実行しようとすると、「Thread 1:EXC_BAD_ACCESS (code=1,アドレス=0x10)」。最後の '...setAttributes...' 行で中断されます。ある時点で、メソッド initWithString:attributes: を使用して attribTitle を初期化しようとしましたが、(そうなったときに) クラッシュが alloc-init 行にあったことを確認しました。

Xcodeの再起動をクリアしようとしましたが、他のすべてのビルドで引き続き発生します...アプリがクラッシュしない場合、属性付きの文字列が期待どおりに表示されます。

プロジェクトファイルが壊れているかどうか疑問に思っていますが、念のため、何かばかげたことをした場合に備えて、誰かが間違いを指摘できますか?おそらく「属性」NSDictionary にありますか?

ありがとう!

トッド。

4

1 に答える 1

1

これはあなたが実行するコードですか、単純化されていますか? そのままでは、私には問題ないように見えます(あえて言います)。1 回おきにクラッシュする場合は、他の状況を示していますが、ここのコードには表示されていません。

これは入っているとおっしゃいまし-awakeFromNib:たが、このメソッドが 2 回実行される可能性はありますか? 私は何度も混乱していましたが、たとえば MainMenu.xib でウィンドウ コントローラーを IB オブジェクトとして作成し、ウィンドウ コントローラーが NIB を介し-[super initWithWindowNibName:]て独自の-init:. これは-awakeFromNib、関連する NIB ごとに 1 回呼び出します。私の場合、初期化の問題の順序をいくつか作成しましたが、これはあなたが説明したものと同様の未定の動作を示しました。

コードを-windowWillLoadand-windowDidLoadメソッドに移動しました。これはウィンドウごとであるため、この問題はありません。

于 2012-05-13T14:41:04.843 に答える