Swift:使用委托时更新UI组件时出错

时间:2014-10-14 13:45:27

标签: user-interface swift delegation

我正在尝试更新进度条,其中包含将大量值加载到CoreData中的进度。但是,每当我尝试在我的progressView组件上调用更新时,我都会收到一个致命错误,指出“在展开Optional值时意外发现了nil”。

有趣的是,即使我在程序的委托方法中放入'self.progressView.progress = 0.5',也会发生这种情况 - 表明它是找不到的progressView组件,而不是值的问题。使用println进行快速检查也可以确认该值确实存在,因此不是零。请注意,如果我将'self.progressView.progress = 0.5'语句放在直接连接到按钮的函数下,它可以正常工作,因此从委托调用该命令必定会出现某种问题。

有人可以解决我在这里做错的事吗?谢谢你的帮助。

委托方法:

class ViewControllerUpdate: UIViewController, NSURLSessionDelegate, NSURLSessionDownloadDelegate, saveUpdate {

[....]

func updateStatus(status: String, progress: Float?) {
    if let percentProgress = progress? {
        self.progressView.progress = 0.5
    }
    //println(progress) - NOTE THIS IS CORRECTLY POPULATED WITH THE APPROPRIATE VALUE
}

致电课程:

protocol saveUpdate {
    func updateStatus(status:String, progress:Float?)
}

class sqlPullSave {

let classtoUpdate: saveUpdate = ViewControllerUpdate()

func saveTSVtoSQL(fromFile: NSURL) -> Int {

    //Load up the information into a Dictionary (tsv)
    //let tsvURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(fromFileName, ofType: fromFileExtension)!)
    let tsvURL: NSURL = fromFile
    let tab = NSCharacterSet(charactersInString: "\t")
    let tsv = CSV(contentsOfURL: tsvURL, separator: tab)
    //let defResult: AnyObject = tsv.rows[0]["Name"]!

    //let tryagain:String = AnyObjecttoString(tsv.rows[1]["Name"]!)
    //load the data into the SQLite database...
    dispatch_async(dispatch_get_main_queue()) {
    for a in 0..<tsv.rows.count {
        self.SQLsaveLine(self.AnyObjecttoString(tsv.rows[a]["Name"]!),
            name_l: "",
            desc: self.AnyObjecttoString(tsv.rows[a]["1"]!),
            jobTitle: self.AnyObjecttoString(tsv.rows[a]["2"]!),
            extn: self.AnyObjecttoString(tsv.rows[a]["3"]!)
        // update status
        var percentComplete: Float = (Float(a) / Float(tsv.rows.count))
        self.classtoUpdate.self.updateStatus("SQLload", progress: percentComplete)
        }
    }
    return 0
}

0 个答案:

没有答案