运行时出现零错误

Posted

技术标签:

【中文标题】运行时出现零错误【英文标题】:Nil Error While Running 【发布时间】:2016-11-10 11:15:36 【问题描述】:

我正在开发 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!")
    

【问题讨论】:

您似乎要解包的唯一可选参数是task.name,您确定这个值不是零吗?您可以尝试在getdata() 方法或cellForRow:at: 中添加断点,以确保数据符合您的预期。 【参考方案1】:

您应该始终避免使用! 解包可选项,因为如果缺少可选项,可能会遇到运行时错误。请尝试以下操作:

let taskName = task.name ?? "No name"
if task.isimportant
    cell.textLabel?.text = " ★   \(taskName)"
else
    cell.textLabel?.text = taskName

【讨论】:

以上是关于运行时出现零错误的主要内容,如果未能解决你的问题,请参考以下文章

在运行SQL时出现错误,请问如何解决?

传递一些值时出现运行时错误

运行查询时出现运行时错误 3075 MS Access VBA

从终端运行时出现运行时错误,但不是从 Eclipse

尝试创建 ActiveX 组件时出现运行时错误 429

运行 dbt run 命令时出现错误