Сбой приложения UIPickerView при подключении к источнику данных / делегату - PullRequest
2 голосов
/ 20 июня 2010

Вырвавшись из головы, пытаясь запустить самые простые учебники из книги «Head First iPhone Development»

Иметь UIPickerView, который связан с массивом объектов.Это все.Он ничего не делает, все, что я хочу (пока), это отображать то, что находится в массиве.Я дословно выполнил шаги, описанные в книге, и перезапустил как минимум 5 раз.При последней попытке я обнаружил, как отлаживать, и добавил несколько точек останова.

Это настолько, насколько приложение получает

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

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

Я проверил, что массив существует и содержит данные - с помощью выбора выбора для компонентов равным 0, я могу вернуть любую строку из массива метке.Только когда я подключаю представление сборщика к источнику данных / делегату через IB, оно разбомбляется.

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

ОБНОВЛЕНИЕ:

Вот код

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


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


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

Я только что попытался вставить пробел в 'pickerViewnumberOfRowsInComponent', хотя есть нет пробелав книге.Вставка пробела в (например, pickerView numberOfRowsInComponent) заставляет UIPickerView работать, но вместо содержимого массива он заполнен вопросительными знаками.Похоже, в книге есть опечатка.

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

Просто чтобы уточнить для всех на основе вашего исходного кода ...

В вашем методе делегата отсутствует пробел:

- (NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent: ...

должно быть:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: ...

ИВаш другой метод делегата пропустил имя аргумента pickerView:

- (NSString *)pickerView:(UIPickerView *) titleForRow: ...

должно быть:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow: ...
0 голосов
/ 21 июня 2010

Вам нужен пробел между pickerView и numberOfRowsInComponent в

(NSInteger) pickerView: (UIPickerView *) pickerViewnumberOfRowsInComponent: (NSInteger) компонент

К сожалению, это опечатка в книге, но это (наряду с другими ошибками) отражено на странице Head First iPhone Development Errata (http://oreilly.com/catalog/errata.csp?isbn=9780596803544).) Извините за головную боль и надеюсь, что вам нравится книга. - - Дан

0 голосов
/ 21 июня 2010

Только что увидел ваше обновление - рад, что вы обнаружили проблему с пространством. Что касается вопросительных знаков, то этого (очевидно) быть не должно. Можете ли вы разместить код, где вы устанавливаете массив действий? - Дан

0 голосов
/ 21 июня 2010

Вы хотите добавить это:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [activities objectAtIndex: row];
}
...