Неустранимая ошибка IOS Swift: неожиданно найдено nil при развертывании необязательного значения

Я новичок в программировании IOS и вообще в программировании.

(у меня XCODE 6.4)

У меня есть код в моем TableViewController, в котором есть данные, которые я хочу передать другому viewController. Я много читал об этом в Интернете, и я написал этот код:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! formule



    let formuleCommand = formulesList[indexPath.row]

    // Configure the cell...

    var shortCut = formuleCommand.formuleText

    cell.formuleLabel.text = shortCut



    return cell
}






var valueToPass:String!

func tablView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    println("You selected cell #\(indexPath.row)!")

    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow();
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath!) as! formule

    valueToPass = cell.formuleLabel.text
    performSegueWithIdentifier("detail", sender: self)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "detail") {

        // initialize new view controller and cast it as your view controller
       var viewController = segue.destinationViewController as! specialitiesViewController
        // your new view controller should have property that will store passed value
        viewController.passedValue = valueToPass
    }

}

В моем TableViewController у меня есть ячейки, содержащие метки с некоторыми данными. Я хочу передать данные с этих меток другому ViewController. И когда я запускаю свое приложение, ошибок нет, но когда я нажимаю на одну из ячеек, которые должны переместить меня в другой ViewController (я установил для этого переход), выводится ошибка: fatal error: unexpectedly found nil while unwrapping an Optional value И приложение вылетает. Помогите мне исправить эту ошибку, пожалуйста!

Спасибо вам за ваши предложения!


person nomorehumor    schedule 06.08.2015    source источник


Ответы (3)


У вас есть valueToPass, определенный как неявно развернутый необязательный элемент, т. е. вы сообщаете iOS, что здесь всегда будет значение.

Поэтому, когда вызывается prepareForSegue, а вы ничего не установили для valueToPass, произойдет сбой. Вы должны инициализировать его некоторым значением.

person Mark    schedule 06.08.2015

Я бы рекомендовал использовать этот код, чтобы открыть ваш контроллер представления (если у вас есть класс для VC, который вы хотите открыть).

let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("your_Storyboard_id") as! Your_VC_Class
        self.navigationController?.pushViewController(viewController, animated: true)
person richbrz    schedule 06.08.2015

Если вы не будете знать значение valueToPass при инициализации, но можете узнать значение через некоторое время, вы должны сделать valueToPass необязательным:

var valueToPass: String?

... а затем развернуть его, когда вам это нужно, и обработать случай, когда он не инициализирован должным образом.

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

Примечание: вообще говоря, нам лучше as?, чем as!, и обрабатывать случай, когда приведение не работает.

person Andrew Ebling    schedule 06.08.2015