我希望用户上传图片,其他用户请回复该图片。到目前为止一切正常,除非该特定图像对象的行为空,应用程序崩溃。
fatal error: unexpectedly found nil while unwrapping an Optional value
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
var error = ""
var query = PFQuery(className:"Posts")
query.getObjectInBackgroundWithId(cellID) {
(objects: PFObject!, error: NSError!) -> Void in
if error == nil {
var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.
for object in array {
self.repliesArray.append(object as String)
}
} else {
self.displayError("Error", error: "Error retreiving")
}
self.tableView.reloadData()
}
}
答案 0 :(得分:0)
这有用吗?您不能将空对象附加到数组,因此这会附加一个空字符串而不是null。你还需要解释标记,以便它可以是零。
var array = objects.objectForKey("replies") as [String!]
for object in array {
if object != nil {
self.repliesArray.append(object as String)
}
else {
self.repliesArray.append("")
}
}
答案 1 :(得分:0)
query.getObjectInBackgroundWithId(cellID) {
(objects: PFObject!, error: NSError!) -> Void in
if error == nil {
var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.
这里的关键是你接受一个隐式解包的可选项(PFObject!
),这意味着它永远不会是nil
的承诺,而是nil
。
理想情况下(*),类型应为(objects: PFObject?, error: NSError?) -> Void
以使选项显式显式,并强制您执行所需的nil
检查。即使来电者声称发送给您(PFObject!, NSError!) -> Void
,我相信您也可以这样做,因为我认为Swift会为您进行隐式&gt;显式转换。
如果仍然无法做到这一点,那么在使用之前,您必须手动验证objects
不是nil
。 (这与@ Dehli的解决方案不同,后者会检查objects
中包含 的内容是非nil
。这不是问题;问题是objects
本身是nil
。)
(*)就现有界面而言,我在这里说“理想”。传递可选值/错误的元组是一个糟糕的模式。更好的解决方案是使用类似Result
object的内容。