Iphone Can';t读取分段控制索引

Iphone Can';t读取分段控制索引,iphone,objective-c,cocoa-touch,uisegmentedcontrol,Iphone,Objective C,Cocoa Touch,Uisegmentedcontrol,我以前实现过几个UISegmentedControl对象,但由于某种原因,我无法在tableview单元格中实现它。我希望用户选择他的性别。如果segmentedControl的值已更改,将调用一个方法来保存它以供进一步处理 self.seg = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Man",@"Female", nil]]; [self.seg addTarget:self action:@s

我以前实现过几个UISegmentedControl对象,但由于某种原因,我无法在tableview单元格中实现它。我希望用户选择他的性别。如果segmentedControl的值已更改,将调用一个方法来保存它以供进一步处理

self.seg = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Man",@"Female", nil]];
[self.seg addTarget:self action:@selector(toggleGender) forControlEvents:UIControlEventValueChanged];
我创建了以下方法:

-(void)toggleGender{
    NSLog(@"%d",self.seg.selectedSegmentIndex)
    if (self.seg.selectedSegmentIndex == 0)
    {
         NSLog(@"User is a man");
    } else if (self.seg.selectedSegmentIndex == 1)
    {    NSLog(@"User is a female");
    }
}
如果值已更改,则第一个NSLog将-1打印为值

我在头文件中声明了seg,创建了一个属性并合成了它! 我当前未取消分配此对象。(我知道这是内存泄漏)

为什么我无法读取所选片段,为什么它会返回-1作为所选项目?

尝试以下操作:

self.seg = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Man",@"Female", nil]];
[self.seg addTarget:self action:@selector(toggleGender:) forControlEvents:UIControlEventValueChanged];
(注意@selector..中的“:”)。并通过以下方式更改您的功能:

-(void)toggleGender:(id)sender
{
    if ([sender isKindOfClass:[UISegmentedControl class]]) 
    {
        NSLog(@"%d",[(UISegmentedControl *)sender selectedSegmentIndex]);
        if ([(UISegmentedControl *)sender selectedSegmentIndex] == 0)
        {
            NSLog(@"User is a man");
        }
        else if ([(UISegmentedControl *)sender selectedSegmentIndex] == 1)
        {
            NSLog(@"User is a female");
        }
    }
}

出于一个或其他原因,它不会检查发送方是否属于UISegmentControl类,因为我在发送方上收到错误。selectedSegmentIndex。。。奇怪的stuff@AlexvanRijs:我的错误,请查看我的更新代码。需要将“发件人”强制转换为UISegmentedControlGreat!请注意,如果仅通过UISegmentedControl调用“toggleGender:”函数,则可以删除测试“isKindOfClass:”,以提高速度。