Вне области действия и неверной сводной ошибки на NSArray - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь создать UIPickerview, как описано в книге по разработке iPhone от Дейва Марка. У меня есть NSArray, который объявлен как свойство в файле h, который будет хранить данные для UIPickerview. Итак, вот что у меня есть:

в файле .h:

@interface RootViewController : UIViewController {
    NSArray *dateForPicker;
}
@property (nonatomic, retain) NSArray *dateforPicker;
@end

В методе .m file viewDidLoad (у меня есть @synthesize для свойства dateForPicker в начале файла .m ):

NSArray *tempArray = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
self.dateforPicker = tempArray;
[tempArray release];

Когда появляется UIPickerview, во всех строках появляется "?" . Поэтому, когда я использовал точку останова для проверки значений tempArray и dateForPicker в методе viewDidLoad, я обнаружил, что tempArray в порядке, но dateForPicker никогда не получает значения из tempArray. Xcode говорит "Недопустимая сводка" для массива dateForPicker и имеет "вне области действия " в качестве значений для пяти строк. Что здесь происходит? Как описано в книге, это должно работать.

Вот код для UIPickerView:

#pragma mark - 
#pragma mark picker data source methods

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [dateforPicker count];
}

#pragma mark picker delegate methods

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

1 Ответ

1 голос
/ 27 сентября 2011

Некоторые проблемы с вашим кодом. Я не уверен, если вы набрали это в вопросе вручную или скопировали и вставили из своего фактического кода:

  • Вы устанавливаете self.dateforPicker, а не self.dateForPicker, существует разница в капитализации между вашим ivar и вашим имуществом. В iOS компилятор синтезировал dateforPicker ивара, когда вы объявили свое свойство, которое было установлено в вашем viewDidLoad, но в других ваших методах вы можете ссылаться на dateForPicker ивара, который никогда не затрагивался.
  • Ваш RootViewController не заявляет, что он реализует UIPickerViewDataSource или UIPickerViewDelegate протоколы
  • Ваше объявление метода titleForRow неверно - ваше начинается с pickView, а не pickerView, поэтому не будет вызвано.

Если у вас есть правильное количество строк в вашем компоненте (вы сказали, сколько знаков вопроса, сколько?), Значит, похоже, что источник данных подключен правильно, но вам также необходимо подключить делегат, так как это что на самом деле предоставляет значения для каждой строки. Источник данных, как ни странно, содержит только количество компонентов и количество строк на компонент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...