我有一个 Swift 文件,其中包含我的所有查询。当使用 saveOperation.perRecordProgressBlock 保存记录时,此文件调用 ChatView View Controller 并更新 ProgressBarUpdate 函数。
到目前为止,我可以在 progressBarUpdate
中进行打印,以很好地打印进度。但是当我更新progressBarMessage.setProgress(value!,animated: true)时,应用程序崩溃并出现以下错误: fatal error :在展开可选值时意外发现nil
如果我尝试通过 viewDidLoad
运行 progressBarMessage.setProgress(value!,animated: true
) ,它会很好地更新进度栏,没有错误。这意味着 socket 工作正常。
要考虑的另一件事是我的 print(".... perRecordProgressBlock - CHAT VIEW\(value)")
工作得很好。如果从 Queris.swift
获取更新。只是 ProgressBarUpdate 导致了问题。
@我的 Queries.swift 文件选项 1
saveOperation.perRecordProgressBlock = { (recordID, progress) -> Void in
print("... perRecordProgressBlock \(Float(progress))")
var chatView = ChatView()
chatView.progressBarUpdate(Float(progress))
}
@我的 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 View Controller
func progressBarUpdate(value: Float)
{
print(".... perRecordProgressBlock - CHAT VIEW\(value)")
if (value as? Float) != nil
{
progressBarMessage.setProgress(value, animated: true)
}
}
最佳答案
实例化 viewController 的方式不正确,因此会出现崩溃/零值。仅当有东西向其发送 view
消息时,viewController
才会加载其 View 层次结构。系统将在何时将 View
层次结构放在屏幕上时自行执行此操作。它发生在诸如 prepareForSegue:sender:
和 viewWillAppear:
、 loadView()
、 self.view
之类的调用之后。
所以这里你的导出仍然为零,因为它还没有加载。
只需尝试强制您的 viewController
调用 self.view
,然后访问该 viewController
中的函数即可。
关于ios - 从不是 viewController 的 swift 文件更新时进度条崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044179/