2013-12-09 3 views
0

Я пытаюсь основной вид сборщика UI с помощью следующего кода,UIPicker вид IOS7 исключение

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.MainPicker.delegate = self; 
    self.MainPicker.dataSource = self; 
    [self.MainPicker selectRow:1 inComponent:0 animated:NO]; 
    _countryNames = @[@"Australia (AUD)", @"China (CNY)", 
         @"France (EUR)", @"Great Britain (GBP)", @"Japan (JPY)"]; 
    //NSLog(@"%@", [_countryNames objectAtIndex:0]); 

    _exchangeRates = @[ @0.9922f, @6.5938f, @0.7270f, 
         @0.6206f, @81.57f]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row 
     inComponent:(NSInteger)component 
{ 
    float rate = [_exchangeRates[row] floatValue]; 
    float dollars = 10.0; 
    float result = dollars * rate; 

    NSString *resultString = [[NSString alloc] initWithFormat: 
           @"%.2f USD = %.2f %@", dollars, result, 
           _countryNames[row]]; 
    NSLog(@"%@",resultString); 
    [pickerView reloadAllComponents]; 
} 
- (IBAction)Submit:(id)sender { 
} 
-(IBAction)textFieldReturn:(id)sender 
{ 
    [sender resignFirstResponder]; 
} 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component 
{ 
    return _countryNames.count; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView 
      titleForRow:(NSInteger)row 
      forComponent:(NSInteger)component 
{ 
    return _countryNames[row]; 
} 
@end 

Получение исключение при запуске с указанием

2013-12-09 15: 46: 11,174 pickerExample [20718: A0B] - [UIView numberOfComponentsInPickerView]: непризнанный селектор отправлен например 0x9880e80 2013-12-09 15: 46: 11.260 pickerExample [20718: A0B] * Согласующего приложение из-за неперехваченное исключением «NSInval idArgumentException ', reason:' - [UIView numberOfComponentsInPickerView:]: непризнанный селектор, отправленный на экземпляр 0x9880e80 '.

Я связал источник данных и делегаты с текущим контроллером. Может ли кто-нибудь вести, где я иду не так!

+0

В 'viewDidLoad', в какой строке ваше приложение разбилось? – Maulik

+0

Я не думаю, что его сбой в viewdidload, его рассказ в UIView numberOfComponentsInPickerView – bharath

+0

Yup, он отлично проходит через viewdidload и падает после этого !! – bharath

ответ

0

Ваша проблема в вызове метода [self.MainPicker selectRow:1 inComponent:0 animated:NO]; перед установкой datasource. на самом деле вы пытаетесь выбрать строку еще до setting up UIPicker так настроить свой _countryNames и _exchangeRates перед вызовом этого метода, как показано ниже ...

в вашем viewDidLoad

инициализации источника данных

_countryNames = @[@"Australia (AUD)", @"China (CNY)", 
         @"France (EUR)", @"Great Britain (GBP)", @"Japan (JPY)"]; 
    //NSLog(@"%@", [_countryNames objectAtIndex:0]); 

    _exchangeRates = @[ @0.9922f, @6.5938f, @0.7270f, 
         @0.6206f, @81.57f]; 

// метод вызова

self.MainPicker.delegate = self; 
     self.MainPicker.dataSource = self; 
     [self.MainPicker selectRow:1 inComponent:0 animated:NO]; 
Смежные вопросы