UIPickerView выбор входа Swift 4 или 5 - PullRequest
1 голос
/ 08 октября 2019

У меня есть UIPickerView, который выбирает из массива состояний, и последний элемент в массиве находится «за пределами США». Когда выбран последний элемент в массиве, я хочу показать другую опцию ввода для страны.

В настоящее время у меня введен скрытый ввод страны viewDidLoad.

Это моя попытка заставить это работать, но это продолжает вызывать сбой при выборе последнего элемента.

var stateOptionsList = ["", "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District Of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Outside The United States"]

let outsideOfUS = stateOptionsList[statePicker.selectedRow(inComponent: 52)] as String

print(outsideOfUS)

if selectStateInput.text == outsideOfUS {
    countryContainer.isHidden = false
} else {
    countryContainer.isHidden = true
}

Я поместил переменную let outsideOfUs вpickerView didSelectRow. Не уверен, что это то место, где я должен это поставить.

1 Ответ

2 голосов
/ 08 октября 2019

Вы используете:

selectedRow(inComponent: 52)

Итак, он, несомненно, аварийно завершил работу с сообщением об ошибке, например:

Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '*** - [__ NSArrayM objectAtIndex:]: индекс 52 за пределами [0 .. 0] '

Когда происходит сбой, он часто выдает полезные сообщения, подобные этому. Это сообщение говорит нам, что сборщик имеет только один компонент. Там нет компонента номер 52.

Так что вместо этого просто возьмите элемент непосредственно из объекта вашей модели:

let outsideOfUS = stateOptionsList[52]

Или, так что вам не придется менять это, если вы позжедобавьте другие территории США, такие как Пуэрто-Рико, просто возьмите последнюю из вашего списка, например,

guard let outsideOfUS = stateOptionsList.last else { return }
...