线程 1 EXC 错误

Posted

技术标签:

【中文标题】线程 1 EXC 错误【英文标题】:Thread 1 EXC error 【发布时间】:2017-08-21 00:31:24 【问题描述】:

我一直在创建一个 firebase 数据库,但我遇到了一个无法克服的错误。它说:

线程 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)'

这可能是一些简单的事情,我只是在回顾过去。有什么想法吗?

这是代码&错误在代码行:

//
//  Database.swift
//  intern
//
//  Created by Lani  Daniels on 8/20/17.
//  Copyright © 2017 Lani  Daniels. All rights reserved.
//

import UIKit
import Firebase
import FirebaseDatabase

struct PostStruct 
    let title: String
    let message: String


class DatabaseViewController: UITableViewController 
    var posts: [PostStruct] = []

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let cell = tableview.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        let label1 = cell.viewWithTag(1)as! UILabel
        label1.text=posts[indexPath.row].title

// 错误如下:线程 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0) 让 label2 = cell.viewWithTag(2)as! UIL标签 label2.text=posts[indexPath.row].message

        return cell
    

【问题讨论】:

Swift 区分大小写。 所以,我更正了语法错误,但最终在下面一行出现错误。它说“线程 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)”知道这是什么意思吗? 它不能在两条线上都崩溃...告诉我们它在哪条线上崩溃? 【参考方案1】:

对于第一个错误:

let cell = tableview.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

将tableview改为tableView

第二个: 您似乎正在尝试访问可能不是 UILabel 的插座。通过进行可选投标来检查这一点:

let label2 = cell.viewWithTag(2) as? UILabel 

并使用断点检查该标签。可能为零。

另外,最好使用带有两个标签的自定义单元格作为出口,然后在 cellForRowAt 方法中将该自定义单元格出列:

class CustomCell: UITableViewCell 
        @IBOutlet weak var firstLabel: UILabel!
        @IBOutlet weak var secondLabel: UILabel!

然后

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let cell = tableview.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? CustomCell

        cell?.firstLabel.text=posts[indexPath.row].title
        cell?.secondLabel.text=posts[indexPath.row].message

    return cell!

别忘了在界面构建器中为单元格设置自定义类

【讨论】:

我没有投反对票,但这个问题应该作为错字关闭 所以,我更正了语法错误,但最终在下面一行出现错误。它说“线程 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)”知道这是什么意思吗? 您似乎正在尝试访问可能不是 UILabel 的插座。通过进行可选的投标来检查这一点:let label2 = cell.viewWithTag(2) as? UILabel 并使用断点检查该标签。可能为零。此外,最好使用具有两个标签的自定义单元格作为出口,然后在 cellForRowAt 方法中将该自定义单元格出列

以上是关于线程 1 EXC 错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:“线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)

Swift,线程 1:EXC_BAD_INSTRUCTION 错误

Swift 错误 - 线程 1:EXC_BAD_INSTRUCTION

错误“线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”是啥意思?

收到“线程 1:EXC_BAD_ACCESS”错误?

错误 - 线程 1 exc_bad_instruction(代码=exc_1386_invop 子代码=0x0)