0

我有一個NSSegmentedControl,在Interface Builder中將兩個段設置爲「Select None」模式。無論我嘗試什麼,我都無法使-selectedSegment返回除0之外的任何內容,即使段0默認爲禁用狀態,也不可能被選中。下面是當你點擊控件中的任何段被調用相關功能:NSSegmentedControl -selectedSegment總是返回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也嘗試過,但它有同樣的結果。
你可以提供的任何幫助將是非常棒的,我不知道我做錯了什麼。謝謝!
SphereCat1

編輯:這是一個facepalm時刻,請參閱下面的答案。

回答

1

好的,這是一個facepalm時刻。原來我是NSLogging錯誤的東西,並且在我的步增/減邏輯中只有一個錯誤。

一切都好! :)

捂臉
SphereCat1

0

您確定navigationButton已初始化?把一個NSLog聲明是這樣的:

NSLog (@"%@", navigationButton); 

如果消息nil對象,你會得到0結果。如果navigationButtonIBOutlet,則需要確保它在Interface Builder中正確鏈接。

+0

它確實是initalized。 NSLog返回 vilhalmer 2010-05-17 01:01:10

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]; 
+0

你是對的,那是不必要的。我認爲我最初有一個不同的功能,當我改變它時,並沒有刪除這個演員。感謝您指出了這一點! – vilhalmer 2010-05-17 01:48:57