我的代码中出现了一些可怕的“无法解包Optional.None”错误的代码。
我正在关注iTunes U斯坦福大学课程中的Shutterbug代码。
这是Objective-C中为其中一个类提供的代码。
以及我在Swift中提出的内容;
在追踪错误之后,这些行似乎特别给我带来了问题
self.scrollView.zoomScale = 1.0
和
self.image = nil
关于这里出了什么问题的任何建议?
我最初把所有的setter放在ViewDidLoad函数中并且收到了同样的错误。
答案 0 :(得分:1)
准备segue时会调用此行: ivc.imageURL = flickerFetcher.URLforPhoto(照片,格式:FlickrFetcher.FlickrPhotoFormat.Large)
在imageURL上调用setter:
set {
self.startDownloadingImage()
}
startDownloadingImage()调用image上的setter,这是你得到所有错误的地方:
set{
self.imageView.image = image
self.scrollView.zoomScale = 1.0
self.spinner.stopAnimating()
self.imageView.frame = CGRectMake(0, 0, image!.size.width, image!.size.height)
}
由于所有这一切都发生在prepareForSegue中,因此此时尚未加载视图控制器,并且所有出口都是零,因此无法解包Optional.none。
您需要重新构建程序的逻辑,以便它们在加载之前不会尝试使用插件。
答案 1 :(得分:0)
检查您的插座是否已连接。出口被定义为隐式展开的Optionals,因此如果您引用未设置的属性(例如,如果出口未连接),您可能会看到该错误
我已经下载了你的项目,并且出口出现了问题 - 在Xcode中,scrollview和spinner有点灰色。这是滚动视图和微调器出现在我身上的方式:
这意味着没有为当前选定的尺寸类安装项目。如果您转到该视图的属性检查器,请确保选中已安装选项对于你关心的尺寸等级:
在您的项目中,未检查顶部框(表示任何大小的类)。
然而,代码中存在更多问题,在本答案中无法详细介绍。你有几个导致问题的问题,包括(我确实在一段时间后放弃了):
get
的{{1}}闭包imageURL
时实施set
或willSet
个闭包 - 例如,scrollView上的didSet
会更好willSet
,或者您应该使用didSet
而不是newValue
,因为在scrollView
时,willSet
仍然是scrollView
。nil
的值设置为nil
属性,然后在该属性的setter块中访问它