【问题标题】:IBOutlet property returning "Can't unwrap Optional.None" errorIBOutlet 属性返回“Can't unwrap Optional.None”错误
【发布时间】:2014-08-19 23:37:22
【问题描述】:

我的代码中出现了可怕的“Can't unwrap Optional.None”错误。

我正在关注 iTunes U 斯坦福大学课程中的 Shutterbug 代码。

这是 Objective-C 中为其中一个类提供的代码。

http://pastebin.com/LG2k3BBW

以及我在 Swift 中的想法;

http://pastebin.com/pGtSzu6z

在跟踪错误之后,这些行似乎特别给我带来了问题

self.scrollView.zoomScale = 1.0

self.image = nil

对这里出了什么问题有什么建议吗?

我最初将所有设置器都放在 ViewDidLoad 函数中,但收到了同样的错误。

【问题讨论】:

  • 确保 ScrollView 插座已连接..
  • @Yatheesha 肯定连接
  • 你能分享样品吗?
  • 最好的方法是什么?
  • Github 或 Dropbox 最适合共享项目

标签: ios swift cs193p


【解决方案1】:

检查您的插座是否已连接。 Outlets 被定义为隐式展开的 Optionals,因此如果您引用未设置的属性(例如,如果未连接 outlet),您可能会看到该错误

我已经下载了您的项目,但插座有问题 - 滚动视图和微调器在 Xcode 中有点灰显。这是滚动视图和微调器为我显示的方式:

这意味着没有为当前选择的尺寸等级安装项目。如果您转到该视图的属性检查器,请确保选中 已安装 选项对于您关心的尺寸等级:

在您的项目中,顶部框(代表任何尺寸等级)没有被选中。

但是,代码中还有很多问题,太多了,无法在此答案中详细介绍。您有几个导致问题的问题,包括(我确实在一段时间后放弃了):

  • 属性访问器中的无限循环 - 例如,imageURLget 闭包
  • 当你真正想要didSet时实现setwillSet闭包——例如,滚动视图上的willSet最好是didSet,或者你应该使用newValue而不是@ 987654331@,因为在willSet这一点上,scrollView仍然是nil
  • nil 的值设置为image 属性,然后在该属性的setter 块中访问它
  • 您的下载逻辑发生了一些奇怪的事情(此时,我决定收工,抱歉)

【讨论】:

  • 绝对连接,检查了很多次,我也有一个 ActivityIndi​​catorView 似乎给了我同样的错误。那肯定也有联系
  • 你是如何创建视图控制器的?如果插座已连接但在您运行时它们不存在,也许您正在创建一个实例而不访问 nib / storyboard?
  • 视图控制器是通过情节提要制作的,所有内容都是通过情节提要添加的
  • 只是为了好玩尝试重新启动 Xcode。我在测试版中遇到了几个问题,如果不重新启动,更改似乎不会持续。这些可能不会引起注意,因为您在所有崩溃中不由自主地重新启动了很多次;)
  • 试过重新启动它,从昨晚开始就出现了问题,所以我认为它不是临时错误
【解决方案2】:

当您准备 segue 时,会调用此行: ivc.imageURL = flickerFetcher.URLforPhoto(照片,格式:FlickrFetcher.FlickrPhotoFormat.Large)

在 imageURL 上调用 setter:

set {
    self.startDownloadingImage()
}

startDownloadingImage() 调用图像上的设置器,这是你得到所有错误的地方:

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。

您需要重新构建程序的逻辑,使其不会在加载前尝试对 outlet 进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多