2012-07-02 24 views
0
的selectedSegmentIndex

我編程添加一個UISegmentedControl我UINavigationBar的如下EXC_BAD_ACCESS時試圖讓UISegmentedControl

UISegmentedControl *toggleSwitch = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects: @"Bar", @"Scatter", nil]]; 
toggleSwitch.segmentedControlStyle = UISegmentedControlStyleBar; 
[toggleSwitch addTarget:self action:@selector(toggleSwitched:) forControlEvents:UIControlEventValueChanged]; 

UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:toggleSwitch]; 
self.navigationItem.rightBarButtonItem = buttonItem; 
[toggleSwitch release]; 
[buttonItem release]; 

然後我有一個方法,toggleSwitched處理事件:

-(void) toggleSwitched:(id) sender { 
    if([sender isKindOfClass:[UISegmentedControl class]]) { 
     NSLog(@"%@",((UISegmentedControl*)sender).selectedSegmentIndex); 
    } 
} 

從我閱讀了Apple Documentation,這是設置觸摸事件的事件處理的正確方法。

然而,當我運行程序(在模擬器),然後點擊段,下面的事情發生:

  1. 如果它是第一段(索引0),「空」登錄到控制檯
  2. 如果它是第二鏈段(索引1),與EXC_BAD_ACCESS程序崩潰

當我看在調試器的變量窗口,發送者是類型UISegmentedControl和_selectedSegment屬性似乎是正確的(0或1)。

我不正確地訪問什麼,我如何設置我的委託函數來切換UISegmentedController的兩個值?

回答

2

您的NSLog是錯誤的。 selectedSegmentIndex返回NSUInteger,所以您需要使用@"%d"而不是@"%@"%@是針對對象的,因此係統試圖將該號碼用作指向對象的內存地址,併爲您生成錯誤。

+0

總是那些簡單的那些得到亞......這就是它。 – Benmj