Нулевая ошибка во время работы

я работаю над приложением TODO, все было завершено и работало хорошо, но вдруг оно начинает выдавать ошибку «фатальная ошибка: неожиданно найдено nil при распаковке необязательного значения». Нужно какое-то руководство!

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


@IBOutlet weak var tableView: UITableView!

var tasks : [Task] = [ ]
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    // Do any additional setup after loading the view, typically from a nib.
}

override func viewWillAppear(_ animated: Bool) {
    getdata()

    tableView.reloadData() 
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tasks.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()

    let task  = tasks[indexPath.row]

    if task.isimportant{
        cell.textLabel?.text = " ★   \(task.name!)"

    }else{
        cell.textLabel?.text = task.name!
    }

    return cell
}

func getdata() {
    let context =  (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    do{
    tasks = try  context.fetch(Task.fetchRequest())
    }
    catch {
        print ("Failed!")
    }
}

}


person AhmedRaza Aedhi    schedule 10.11.2016    source источник
comment
Единственный необязательный параметр, который вы, кажется, разворачиваете, это task.name, вы уверены, что это значение не равно нулю? Вы можете попробовать добавить точку останова либо в метод getdata(), либо в метод cellForRow:at:, чтобы убедиться, что данные соответствуют вашим ожиданиям.   -  person Ollie    schedule 10.11.2016


Ответы (1)


Вы всегда должны избегать развертывания опций с помощью ! из-за опасности возникновения ошибки времени выполнения, если опция отсутствует. Попробуйте следующее:

let taskName = task.name ?? "No name"
if task.isimportant{
    cell.textLabel?.text = " ★   \(taskName)"
}else{
    cell.textLabel?.text = taskName
}
person Vince O'Sullivan    schedule 10.11.2016