fatal error : (On Adding and removing a View from SuperView)
fatal error : (On Adding and removing a View from SuperView)
我正在使用 https://github.com/keygx/GradientCircularProgress 这个 cocoa pod 在我的应用程序中创建渐变圆圈
这是我的代码。
import GradientCircularProgress
class MyViewController : UIViewController {
let progress = GradientCircularProgress()
var progressView: UIView?
var Opt2Btn : UIButton?
override func viewDidLoad()
{
super.viewDidLoad()
//My Code
self.create()
}
func reset()
{
self.progressView?.removeFromSuperview()
//self.progressView = nil
// Some more Code
self.create()
}
func create()
{
let ratio: CGFloat = CGFloat(correctCount) / CGFloat(temp.count)
let rect = CGRect(x: 0, y: 0, width: 200, height: 200)
progressView = progress.showAtRatio(frame: rect, display: true, style: GreenLightStyle() as StyleProperty)
progressView?.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.width / 2 )
view.addSubview(progressView!)
progress.updateRatio(ratio)
Opt2Btn = UIButton(frame: CGRect(x: 10, y: (progressView?.frame.size.height)! + 190 + (correctLbl?.frame.size.height)! , width: self.view.frame.width - 20 , height: 40))
Opt2Btn?.setTitle("Reset", for: .normal)
Opt2Btn?.backgroundColor = UIColor.blue
Opt2Btn?.layer.borderColor = UIColor .blue.cgColor
Opt2Btn?.addTarget(self, action: #selector(self.reset), for: .touchUpInside)
self.view.addSubview(Opt2Btn!)
}
}
我尝试生成与我的应用程序相同的场景。当我 运行 这段代码时,它第一次完美地显示了圆圈。当我按下按钮(Opt2Btn)时,它也会清除圆圈但不会再次创建。给出这个错误,
fatal error: unexpectedly found nil while unwrapping an Optional value
在view.addSubview(progressView!)
这一行。我也试过 self.progressView = nil
但没用。
我是 Swift 的新手。谁能建议我在这里做错了什么?
谢谢!!
似乎从其父视图中删除 progessView
会导致 progress.showAtRatio
到 return nil
。然后你在 view.addSubView(progressView!)
中强制展开 progressView
并得到一个异常。
如果您参考所用框架的文档,您会发现应该使用
progress.dismiss(progress: progressView!)
不是removeFromSuperview
。
使用 ! 强制展开变量时,您应该始终小心。 - 问问自己 "Could this be nil and do I want my program to crash if it is?"
我正在使用 https://github.com/keygx/GradientCircularProgress 这个 cocoa pod 在我的应用程序中创建渐变圆圈
这是我的代码。
import GradientCircularProgress
class MyViewController : UIViewController {
let progress = GradientCircularProgress()
var progressView: UIView?
var Opt2Btn : UIButton?
override func viewDidLoad()
{
super.viewDidLoad()
//My Code
self.create()
}
func reset()
{
self.progressView?.removeFromSuperview()
//self.progressView = nil
// Some more Code
self.create()
}
func create()
{
let ratio: CGFloat = CGFloat(correctCount) / CGFloat(temp.count)
let rect = CGRect(x: 0, y: 0, width: 200, height: 200)
progressView = progress.showAtRatio(frame: rect, display: true, style: GreenLightStyle() as StyleProperty)
progressView?.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.width / 2 )
view.addSubview(progressView!)
progress.updateRatio(ratio)
Opt2Btn = UIButton(frame: CGRect(x: 10, y: (progressView?.frame.size.height)! + 190 + (correctLbl?.frame.size.height)! , width: self.view.frame.width - 20 , height: 40))
Opt2Btn?.setTitle("Reset", for: .normal)
Opt2Btn?.backgroundColor = UIColor.blue
Opt2Btn?.layer.borderColor = UIColor .blue.cgColor
Opt2Btn?.addTarget(self, action: #selector(self.reset), for: .touchUpInside)
self.view.addSubview(Opt2Btn!)
}
}
我尝试生成与我的应用程序相同的场景。当我 运行 这段代码时,它第一次完美地显示了圆圈。当我按下按钮(Opt2Btn)时,它也会清除圆圈但不会再次创建。给出这个错误,
fatal error: unexpectedly found nil while unwrapping an Optional value
在view.addSubview(progressView!)
这一行。我也试过 self.progressView = nil
但没用。
我是 Swift 的新手。谁能建议我在这里做错了什么? 谢谢!!
似乎从其父视图中删除 progessView
会导致 progress.showAtRatio
到 return nil
。然后你在 view.addSubView(progressView!)
中强制展开 progressView
并得到一个异常。
如果您参考所用框架的文档,您会发现应该使用
progress.dismiss(progress: progressView!)
不是removeFromSuperview
。
使用 ! 强制展开变量时,您应该始终小心。 - 问问自己 "Could this be nil and do I want my program to crash if it is?"