swift - 我的代码一周后停止工作 - fatal error : unexpectedly found nil while unwrapping an Optional value

标签 swift parse-platform ios8

自从我编写这段代码以来,它一直在为我工作,但今天它决定不再为我工作。我一天中的大部分时间都在试图解决这个问题,它慢慢地让我发疯。我不断收到“ fatal error :在展开可选值时意外发现 nil”错误。我明白这意味着什么,但我似乎无法解决它。我找到了这个帖子 - "unexpectedly found nil while unwrapping an Optional value" when retriveing PFFile from Parse.com - 并尝试了解决方案,但没有成功。这是我的代码:

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 之前放入的打印行正确打印出我试图从 Parse 数据浏览器访问的 PFFile。我只是不明白它怎么能工作一周然后突然停止工作。如果有人可以帮助我,我将非常感激。谢谢!

回答

所以,在我把头撞到办公 table 上好几个小时之后,我终于说去他妈的并删除了我的代码,只是为了重新编写它并让它再次工作......这是现在的工作代码,但我也根据下面帖子的建议对其进行了一些更新。

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 - 它仍然是可选的,但您指示编译器将其视为非可选(即自动展开)。

另请注意,您正在从可能不是主线程的线程修改 UI 组件。最好将其包含在 dispatch_async 中。在主线程上。

关于swift - 我的代码一周后停止工作 - fatal error : unexpectedly found nil while unwrapping an Optional value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308966/

相关文章:

swift - 解包 Optional 时意外发现 nil

ios - 有没有办法在 Swift 中立即更改 UIBarButtonItem?

ios - Swift:无法将 NSNumber 类型转换为预期的参数类型 Int16

ios - 注销时 Firebase 给出异常

swift - 更改 UIButton 标题导航栏的颜色

ios - 无法通过GPS在ios8中获取经度和纬度

ios - 如何从 XMPP 消息存储中删除聊天记录?

ios - 创建主题标签字段以在 Swift 中进行解析

objective-c - PFUser 在 fetchAllIfNeeded 之后调用 objectForKey 时抛出 NSInternalInconsistencyException

android - 无法使用 Parse 在 Android 中接收推送通知