Swift 关于线程1:致命错误:隐式展开可选值时意外发现nil

Swift 关于线程1:致命错误:隐式展开可选值时意外发现nil,swift,xcode,image,error-handling,Swift,Xcode,Image,Error Handling,我有一个线程1:致命错误:在隐式展开我的项目中的可选值错误时意外地发现了nil。我遇到了很多错误,但我无法修复它。任何人都可以帮助我。 代码如下: 我认为问题在于类(canvas),因为当我调用视图时,这将是一个问题,但我的应用程序需要这样做 import UIKit import Foundation class WarmUpControlClass: UIViewController { @IBOutlet weak var UserImage: UIImageView!

我有一个线程1:致命错误:在隐式展开我的项目中的可选值错误时意外地发现了nil。我遇到了很多错误,但我无法修复它。任何人都可以帮助我。 代码如下: 我认为问题在于类(canvas),因为当我调用视图时,这将是一个问题,但我的应用程序需要这样做

    import UIKit
import Foundation
class WarmUpControlClass: UIViewController {

    @IBOutlet weak var UserImage: UIImageView!
    let canvas = WarmUp()
    //func to creates and instantiates the UIView object (warmUp class object)
   override func loadView() {
 //to call functions in the warm up class to enable user drawing

   self.view = canvas

    }
    override func viewDidLoad() {
         //to show the user image in the top right corner

              let decodedData = Data(base64Encoded: SelectedUser.ImageString, options: .ignoreUnknownCharacters)
              let decodedimage:UIImage? = UIImage(data: decodedData! as Data)
              UserImage.image = decodedimage //i put .image to convert from UIimage to UIimageVeiw
              UserImage.image = decodedimage
              UserImage.layer.cornerRadius = UserImage.frame.size.width/2
              UserImage.clipsToBounds = true


        canvas.backgroundColor = .white //to set white background to drawing screen
        super.viewDidLoad()
}//end conterol class
    //this class to do all drawing methods (user writing)
    class WarmUp: UIView {



        override func draw(_ rect: CGRect) {
               super.draw(rect)  //custom drawing
               guard let context = UIGraphicsGetCurrentContext() else
               { return }
            context.setStrokeColor(UIColor.gray.cgColor)
               context.setLineWidth(8)
               context.setLineCap(.round)
               lines.forEach { (line) in
                       for(i , p) in line.enumerated(){
                           if i == 0 {
                           context.move(to: p)
                           } else {
                           context.addLine(to: p)
                           }
                       }//end for
                    }
               context.strokePath()
           }
           var lines = [[CGPoint]]()//two dimantional array
           override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
               lines.append([CGPoint]())
           }
           //track the finger as we move across screen
           override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
               guard let point = touches.first?.location(in: nil) else {return}

               guard var lastLine = lines.popLast() else { return }
               lastLine.append(point)

               lines.append(lastLine)

               setNeedsDisplay()
           }

    }

}
导入UIKit
进口基金会
类WarmupControl类:UIViewController{
@ibvar-UserImage:UIImageView!
让canvas=WarmUp()
//func创建并实例化UIView对象(预热类对象)
重写func loadView(){
//调用预热类中的函数以启用用户绘图
self.view=canvas
}
重写func viewDidLoad(){
//在右上角显示用户图像的步骤
让decodedData=Data(Base64编码:SelectedUser.ImageString,选项:。忽略未知字符)
让decodedimage:UIImage?=UIImage(数据:decodedData!作为数据)
UserImage.image=decodedimage//i将.image从UIimage转换为UIImageView
UserImage.image=decodedimage
UserImage.layer.cornerRadius=UserImage.frame.size.width/2
UserImage.clipstobunds=true
canvas.backgroundColor=.white//将白色背景设置为绘图屏幕
super.viewDidLoad()
}//结束控制类
//此类用于执行所有绘图方法(用户编写)
类预热:UIView{
重写函数绘图(rect:CGRect){
super.draw(rect)//自定义绘图
guard let context=UIGraphicsGetCurrentContext()else
{return}
context.setStrokeColor(UIColor.gray.cgColor)
context.setLineWidth(8)
context.setLineCap(.round)
lines.forEach{(line)in
对于第.枚举()行中的(i,p){
如果i==0{
上下文。移动(到:p)
}否则{
context.addLine(to:p)
}
}//结束
}
context.strokePath()
}
变量行=[[CGPoint]]()//二维数组
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
行。追加([CGPoint]())
}
//在屏幕上移动时跟踪手指
覆盖功能触摸移动(touchs:Set,带有事件:UIEvent?){
guard let point=touch.first?.location(in:nil)else{return}
guard var lastLine=lines.popLast()else{return}
lastLine.append(点)
行。追加(最后一行)
setNeedsDisplay()
}
}
}

有人帮忙吗?

解码图像为零。你应该检查一下,为什么是零

最好问一个选项是否为零

If let image = imageOptional {
// in here image is not optional
} else {
// maybe print error here
}

UserImage
插座未连接。有关详细信息,请参阅副本。另外,请始终将代码作为文本而不是图片发布。对此我深表歉意,但我确保他在看到这一条时真的连接到了:如果您的问题中没有更多信息,就无法提供任何进一步的帮助。我从数据库中检索图像,并对其进行解码,以在(UserImage)中显示,也以我的课堂视图显示(画布)对于draw
decodedimage
而言,为零不会在此处导致任何错误。我尝试了它,但不起作用:(