我在Swift中有一个文件,可以保存我的所有查询。使用saveOperation.perRecordProgressBlock
此文件保存记录时,请调用ChatView视图控制器并更新progressBarUpdate函数。
到目前为止,我可以在progressBarUpdate
内获得打印以正确打印进度。但是当我更新progressBarMessage.setProgress(value!, animated: true)
时,应用程序崩溃时出现以下错误:fatal error: unexpectedly found nil while unwrapping an Optional value
如果我尝试通过progressBarMessage.setProgress(value!, animated: true
运行viewDidLoad
),它会更新进度条,没有错误。这意味着插座工作得很好。
要考虑的其他事情是我的print(".... perRecordProgressBlock - CHAT VIEW\(value)")
工作得很好。如果从Queris.swift
获取更新。只是progressBarUpdate引起了问题。
@ my Queries.swift file option 1
saveOperation.perRecordProgressBlock = { (recordID, progress) -> Void in
print("... perRecordProgressBlock \(Float(progress))")
var chatView = ChatView()
chatView.progressBarUpdate(Float(progress))
}
@ my Queries.swift文件选项2
saveOperation.perRecordProgressBlock = { (recordID, progress) -> Void in
print("... perRecordProgressBlock \(Float(progress))")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let chatViewController = storyboard.instantiateViewControllerWithIdentifier("ChatViewVC") as! ChatView
chatViewController.progressBarUpdate(Float(progress))
}
@ ChatView视图控制器
func progressBarUpdate(value: Float)
{
print(".... perRecordProgressBlock - CHAT VIEW\(value)")
if (value as? Float) != nil
{
progressBarMessage.setProgress(value, animated: true)
}
}
答案 0 :(得分:0)
var chatView = ChatView()
我要在这里走出去,说你正在使用故事板/ xibs。如果是这样,以上将不是实例化新视图控制器的正确方法。 Here's some information on the difference(问题涉及Objective-C,但Swift中的概念相同)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let chatViewController = storyboard.instantiateViewControllerWithIdentifier("identifier-you-set-in-storyboard") as! ChatView
identifier-you-set-in-storyboard
是set in the interface builder的地方(链接的问题很旧,但说明了概念,字段标签可能在较新版本中发生了变化)
如果您创建的某些机会是在代码中设置视图(而不是故事板),则需要在chatView.loadView()
之前调用chatView.progressBarUpdate...
。 (或者只是尝试访问view
属性,它应该为您调用loadView
。)
答案 1 :(得分:0)
实例化viewController
的方式不正确,因此崩溃/零值。仅当某些内容向其发送viewController
消息时,view
才会加载其视图层次结构。当将view
层次结构放在屏幕上时,系统将自行执行此操作。它会在prepareForSegue:sender:
和viewWillAppear:
,loadView()
,self.view
等来电后发生。
所以在这里你的网点仍然是零,因为它尚未加载。
尝试强制viewController
拨打self.view
,然后从viewController
访问这些功能。