0

Interface Builder で「Select None」モードに設定された 2 つのセグメントを持つ NSSegmentedControl があります。何を試しても、-selectedSegment で 0 以外を返すことはできません。セグメント 0 はデフォルトで無効になっていて、選択できない可能性があります。コントロールの任意のセグメントをクリックすると呼び出される関連関数は次のとおりです。

-(IBAction)changeStep:(id)sender
{
    [stepContainer setHidden:TRUE];
    [(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];
    switch ([[navigationButton cell] selectedSegment])
    {
    case 0:
        [wizard setStep:(NSInteger *)[wizard step]-1];
        break;
    case 1:
        [wizard setStep:(NSInteger *)[wizard step]+1];
        break;
    default:
        break;
    }
    //[[navigationButton cell] setSelected:FALSE forSegment:[navigationButton selectedSegment]];

    if ([wizard step] > 0)
    {
        [wizard setStep:0];
        [navigationButton setEnabled:FALSE forSegment:0];
    }

    NSLog(@"%d", [wizard step]);
    [stepContainer addSubview:(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]]];
    [stepContainer setHidden:FALSE withFade:TRUE];
}

-isSelectedForSegment も使用してみましたが、結果は同じです。
あなたが提供できるどんな助けも素晴らしいでしょう、私は何が間違っているのかわかりません。ありがとう!
スフィアキャット1

編集:これはフェイスパームの瞬間です。以下の私の答えを見てください。

4

3 に答える 3

1

よし、これはフェイスパームの瞬間だ。間違ったことを NSLogging していたことがわかりました。ステップのインクリメント/デクリメント ロジックにエラーがあるだけです。

すべて良くなりました!:)


フェイスパームSphereCat1

于 2010-05-17T01:08:31.233 に答える
1

必要のない場所で多くのキャスティングを行っているようです。

[(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];

何を[wizard step]返しますか?キャストする必要はありません。

    [wizard setStep:(NSInteger *)[wizard step]-1];

これはさらに矛盾しています。 NSInteger *はポインター型です (NSIntegerはオブジェクトではありません)。[wizard setStep:]が を受け取る場合NSInteger *、それはおそらく inout パラメータとして使用されているためです。おそらく、要求されたものとは異なる場合に新しいステップを提供するためです。その場合、次のようにする必要があります。

NSInteger newStep = [wizard step] - 1;
[wizard setStep: &newStep];
于 2010-05-17T01:09:06.737 に答える
0

確実にnavigationButton初期化されていますか?NSLog次のようなステートメントを入れます。

NSLog (@"%@", navigationButton);

nilオブジェクトにメッセージを送信する0と、結果として得られます。の場合navigationButtonは、IBOutletInterface Builder で適切にリンクされていることを確認する必要があります。

于 2010-05-17T00:53:19.093 に答える