Подтвердить что ты не робот

Как отлаживать "фатальную ошибку: неожиданно найдено нуль при развертывании необязательного значения"

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

Есть ли хорошие методы отладки, чтобы выяснить, какая опция вызывает эту ошибку?

4b9b3361

Ответ 1

Здесь, по крайней мере, половина ответа (другие респонденты, пожалуйста, сначала прочитайте вопрос!): Используйте симулятор вместо реального устройства iOS.

Отладчик, похоже, очень хорошо указывает на линию с оплошностью maltreated, которая вызывает проблемы... если вы не похожи на меня, вы выбираете время от времени запускать код на устройстве iOS. В последнем случае отладчик набирает меня прямо в середине некоторого кода ассемблера без разумной трассировки стека. Возврат к симулятору дает точный код неисправности.

Ответ 2

У вас Xcode не сбой при неправильной строке кода?

Это не ответ на вопрос, но важно отметить:

When you are not sure about an optional variable, you have to verify if it contains value or not, by using a pattern like this:

var myOptional : String?
if let aString = myOptional {
    //do your work with aString.
}

Ответ 3

Какое в основном необязательное значение - "?" когда вы размещаете? после того, как тип данных является необязательным, а если он развернут и появляется нуль, то нет ошибки, но вы помещаете "!". восклицательный знак после типа данных, тогда, если он разворачивает переменную и появляется nil, тогда происходит сбой или ошибка, поэтому часто используйте необязательный параметр

var myVariable : DataType ? = DataType()
or 
var myVariable : DataType ? = nil
or
var myVariable : DataType ? = value

Необязательный параметр Swift - это переменная, которая может содержать значение или значение. Варианты написаны путем добавления a? к типу:

var myOptionalString:String? = "Hello"

В некоторых местах могут использоваться дополнительные опции:

  • Когда свойство может быть там или нет, например, middleName или супруга в классе Person
  • Когда метод может вернуть значение или ничего, например поиск соответствия в массиве
  • Когда метод может вернуть результат или получить ошибку и вернуть ничего
  • Свойства делегата (которые не всегда должны быть установлены)
  • Для слабых свойств в классах. То, на что они указывают, может задано значение nil
  • Для большого ресурса, который может быть выпущен в вернуть память

https://medium.com/@rrridges/swift-optionals-a10dcfd8aab5