swift2 新手一问,又见错误EXC_BAT_INSTRUCTION

下面这段程式是练习用的,还没写完整,可是试跑的时候就出现上次说的
Thread 1:EXC_BAT_INSTRUCTION (code=EXC_I386_INVOP,subcode=0X0)
我检查了好几次,就是找不到问题,而且,我是照书上打的,见鬼了

import UIKit

class ViewController: UIViewController {
 struct stu {
    var id:Int32
    var name:String
    var chinese:Int32
    var math:Int32
    
    init(id:Int32, name:String, chinese:Int32, math:Int32) {
        self.id = id
        self.name = name
        self.chinese = chinese
        self.math = math
    }
}
var arrStu:Array<stu> = []
var db:COpaquePointer = nil
var statement:COpaquePointer = nil
var sql:NSString = ""
var currentStu = 0

@IBOutlet weak var buttonWrite: UIButton!

@IBOutlet weak var tableViewSqlit: UITableView!
@IBOutlet weak var textChinese: UITextField!
@IBOutlet weak var textName: UITextField!
@IBOutlet weak var labelId: UILabel!
@IBOutlet weak var textMath: UITextField!
@IBOutlet weak var buttonInsert: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
    
    buttonToggle(true, writeAble:false)
    //第一次执行时将资料库复制到 Documents 资料夹
    let fm:NSFileManager = NSFileManager()
    db = nil
    //以下是出现错误的行,下面这行下面这行
    //以下是出现错误的行,下面这行下面这行
    //以下是出现错误的行,下面这行下面这行
    //以下是出现错误的行,下面这行下面这行
    //以下是出现错误的行,下面这行下面这行
    let src:String = NSBundle.mainBundle().pathForResource("student", ofType: "sqlite")!
    let dst:String = NSHomeDirectory() + "/Documents/student.sqlite"
    if !fm.fileExistsAtPath(dst) {
        do {
            try fm.copyItemAtPath(src, toPath: dst)
        } catch _ {
        }
    }
        
        if sqlite3_open(dst, &db) != SQLITE_OK {
            alertMsg("ERROR",msgStr:"cant open the db")
            exit(1)
        }
        sql = "SELECT * FROM class101"
        statement = nil
        if sqlite3_prepare_v2(db, sql.UTF8String, -1, &statement, nil) != SQLITE_OK {
            alertMsg("ERROR",msgStr:"Error to read db")
            exit(1)
        }
        
        while sqlite3_step(statement) == SQLITE_ROW {
            var id = sqlite3_column_int(statement, 0)
            var temName = sqlite3_column_text(statement, 1)
            var name = String.fromCString(UnsafePointer<CChar>(temName))
            var chinese = sqlite3_column_int(statement, 2)
            var math = sqlite3_column_int(statement, 3)
            var student:stu = stu(id:id,name:name!,chinese:chinese,math:math)
            arrStu.append(student)
            
        }
        sqlite3_finalize(statement)
        tableViewSqlit.reloadData()
        showSingle(0)
        
    
}
func buttonToggle(insertAble:Bool, writeAble:Bool) ->Void {
    buttonInsert.enabled = insertAble
    buttonWrite.enabled = writeAble
}
func showSingle(n:Int){
    labelId.text="\(arrStu[n].id)"
    textName.text = String(arrStu[n].chinese)
    textChinese.text = "\(arrStu[n].chinese)"
    textMath.text = "\(arrStu[n].math)"
}
func alertMsg(titleStr:String,msgStr:String) -> Void {
    var alertView:UIAlertView = UIAlertView(title: titleStr,message: msgStr,delegate: self, cancelButtonTitle:"确定")
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

求各位神人帮小妹解

阅读 3.4k
2 个回答

这样的莫名其妙的错误有可能是由于连线后又修改了变量名等,连线失效。这种情况可能导致这样的问题

这个问题我也遇到过,我设置了project -> Build Settings -> Linking -> Other Linker Flag,添加一个"-lsqlite3"试试。我试了是可以解决的问题的。
不过又出现了一个问题,会在labelId.text="(arrStu[n].id)"这里提示报错:“fatal error: Index out of range”。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进