Swift 关于线程1:致命错误:隐式展开可选值时意外发现nil
我有一个线程1:致命错误:在隐式展开我的项目中的可选值错误时意外地发现了nil。我遇到了很多错误,但我无法修复它。任何人都可以帮助我。 代码如下: 我认为问题在于类(canvas),因为当我调用视图时,这将是一个问题,但我的应用程序需要这样做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!
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)中显示,也以我的课堂视图显示(画布)对于drawdecodedimage
而言,为零不会在此处导致任何错误。我尝试了它,但不起作用:(