Swift 我的代码在一周后停止工作-致命错误:在展开可选值时意外发现nil

Swift 我的代码在一周后停止工作-致命错误:在展开可选值时意外发现nil,swift,parse-platform,ios8,Swift,Parse Platform,Ios8,自从我写了这段代码以来,它一直在为我工作,但今天它决定放弃对我的工作。我一天中的大部分时间都在试图解决这个问题,这让我慢慢发疯。我一直收到一个“致命错误:在展开可选值时意外发现nil”错误。我明白它的意思,但我似乎无法修复它。我找到了这个线索,并尝试了这个解决方案,但没有成功。这是我的密码: if let userImageFile: AnyObject = content["imageFile"] as? PFFile { println("Here is your userImageFile

自从我写了这段代码以来,它一直在为我工作,但今天它决定放弃对我的工作。我一天中的大部分时间都在试图解决这个问题,这让我慢慢发疯。我一直收到一个“致命错误:在展开可选值时意外发现nil”错误。我明白它的意思,但我似乎无法修复它。我找到了这个线索,并尝试了这个解决方案,但没有成功。这是我的密码:

if let userImageFile: AnyObject = content["imageFile"] as? PFFile {
println("Here is your userImageFile: \(userImageFile)")
            userImageFile.getDataInBackgroundWithBlock { (imageData:NSData!, error:NSError!) -> Void in
                if error == nil
                {
                    var contentImage = UIImage(data: imageData)
                    self.feedView.image = contentImage
                }
            }
        }
我知道userImageFile不是nil,因为我在getDataInBackgroundWithBlock之前输入的打印行正确地打印出我试图从解析数据浏览器访问的PFFile。我只是不明白它怎么能工作一周然后突然停止工作。如果有人能帮助我,我将非常感激。谢谢

回答

所以,在我的头撞到我的桌子上好几个小时后,我终于说“去它吧”并删除了我的代码,只是为了重新编写它并让它再次工作……这是现在可以工作的代码,但我也用下面帖子的建议对它进行了一些更新

if let imageFile: AnyObject = content["imageFile"] as? PFFile {

            imageFile.getDataInBackgroundWithBlock({ (imageData:NSData!, error:NSError!) -> Void in

                if let imageData = imageData
                {
                    dispatch_async(dispatch_get_main_queue())
                    {
                        var contentImage = UIImage(data: imageData)
                        self.feedView.image = contentImage
                    }
                }
                else
                {
                    //Do something else
                }
            })
        }

即使
userImageFile
不是
nil
,也假定传递给闭包的
imageData
不是
nil
。我将检查该映像是否确实存在于服务器端,并修改您的关闭代码,如下所示:

if let imageData = imageData {
    dispatch_async(dispatch_get_main_queue()) {
        var contentImage = UIImage(data: imageData)
        self.feedView.image = contentImage
    }
} else {
    // Something happened
}

记住,显式展开的可选技术上可以是nIL/COD>——它仍然是可选的,但是您正在指导编译器将其视为非可选的(即自动展开)。


还请注意,您正在从可能不是主线程的线程修改UI组件。最好在主线程上用
dispatch\u async
将其括起来。

感谢您的响应,我尝试了您的代码,但仍然得到相同的“致命错误:在展开可选值时意外发现nil”错误。您能逐行检查代码并找出引发异常的行吗?当我尝试单步进入代码时,它将我带到包含上述代码的viewController,但它不会突出显示任何特定的行……也许我做错了?我还编辑了我的问题,以包括我收到的错误的屏幕截图。您是否尝试设置断点?好的地方是
if
语句,以及closureYes中的第一行,第一次出现错误的地方是if let imageData=imageData行…在该点之前设置的所有断点都有效