UIPickerView проблемы - PullRequest
       22

UIPickerView проблемы

1 голос
/ 18 октября 2010

У меня есть очень простое приложение, которое использует 2-компонентный UIPickerView, который вызывает у меня сбой каждый раз, когда я нажимаю на него.Я перетащил его в поле зрения IB, затем подключил источник данных и делегировал Владельцу файла.В файле .h:

@interface SettingsViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> {

Находясь в .m

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { 
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
NSInteger value;

if (component == 0) {
    value = [tipiDado count];
} else {
    value = [numeroDadi count];
}

return value;
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (component == 0) {
    return [tipiDado objectAtIndex:row];
} else {
    return [numeroDadi objectAtIndex:row];
}
}

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
NSLog(@"Selected Dice: %@. Number of Dice: %@", [tipiDado objectAtIndex:row], [numeroDadi objectAtIndex:row]);
}

Я не знаю, почему он продолжает давать мне SIGBART или EXC_BAD_ACCESS ... Я не знаю, где яЯ делаю неправильно.

Предложения?

Спасибо, ребята.

Ответы [ 5 ]

2 голосов
/ 18 октября 2010

Трудно ответить правильно, не увидев больше кода. Когда он выходит из строя, вы должны точно увидеть, какая строка вызывает сбой (посмотрите на стек вызовов слева). Я предполагаю, что либо один из ваших массивов (tipiDado или NumberroDadi) не сохранен должным образом, либо сохраненные в нем объекты не относятся к типу NSString.

Если вы обновите вопрос с помощью кода, который вы используете для его инициализации, вам будет проще указать точную проблему.

1 голос
/ 18 октября 2010

Это, вероятно, потому что ваши массивы (tipiDado и NumberroDadi) больше не действительны.Может быть, они настроены как объекты с автоматическим выпуском?

Что вы можете сделать, это запустить в режиме отладки (конфигурация отладки и с подключенным отладчиком), и он должен остановиться прямо на линии, где происходит сбой.

0 голосов
/ 18 октября 2010

Я использовал свойство / синтез для их инициализации, поэтому, когда я заполнил их [NSArray arrayWithObjects: ...], я не добавил сохранение, но я забыл использовать self обозначение !!

Запись:

self.tipiDado = [NSArray arrayWithObjects:@"D4",...];

исправил проблему.

0 голосов
/ 18 октября 2010

В didSelectRow вы используете одно и то же значение строки для доступа к обоим массивам.Если массивы не одинакового размера, вы можете получить доступ к элементу вне допустимого диапазона.

Вам следует либо проверить только один массив на основе параметра компонента , либо показать оба вариантаВы можете сделать это вместо:

NSInteger tipiDadoRow = [thePickerView selectedRowInComponent:0];
NSInteger numeroDadiRow = [thePickerView selectedRowInComponent:1];
NSLog(@"Selected Dice: %@. Number of Dice: %@", 
 [tipiDado objectAtIndex:tipiDadoRow], [numeroDadi objectAtIndex:numeroDadiRow]);
0 голосов
/ 18 октября 2010

Попробуйте использовать Распределения с обнаружениями zombo / счетчиком ссылок, чтобы увидеть, какой объект является проблемой.

...