自从我编写这段代码以来,它一直在为我工作,但今天它决定不再为我工作。我一天中的大部分时间都在试图解决这个问题,它慢慢地让我发疯。我不断收到“ 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/