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