斯威夫特的ViewController声明返回nil
let saveNewItem = SaveNewItem()
print(saveNewItem)
if saveNewItem != nil {
print("Contains a value!")
_ = UIApplication.shared.keyWindow!.rootViewController
self.present(saveNewItem, animated: true, completion: nil)
} else {
print("Doesn’t contain a value.")
}
我收到了臭名昭著的:致命错误:意外发现零,而在我的saveNewItem声明,这是一个不同的视图 - 控制通话展开一个可选值斯威夫特的ViewController声明返回nil
:从主SaveNewItem一个这样称呼。
我很困惑,为什么这是返回nil当print语句声明它在声明中有一个值存储。
旁路我想通过检查(cmd + click)saveNewItem常量,它在控制台中重现了我的打印语句,这给出了它创建对象的印象。
我也尝试使用链接作为demonstated在这个问题上的故事板视图 - 控制: How to connect ViewController.swift to ViewController in Storyboard?
找到了一种方法,它没有错误地工作。这些属性必须在创建类对象saveNewItem后调用。我忽略了SaveLookItems类具有:
var itemImage : UIImage!
var imageOrigin : NSString!
var itemType : NSString!
需要具有比为零,否则我得到的致命错误以外的初始值:意外地发现为零。
let saveNewItem = SaveNewItem()
print(saveNewItem)
if saveNewItem != nil {
print("Contains a value!")
saveNewItem.itemImage = image
saveNewItem.itemType = "topItem"
saveNewItem.imageOrigin = "Camera"
_ = UIApplication.shared.keyWindow!.rootViewController
self.present(saveNewItem, animated: true, completion: nil)
} else {
print("Doesn’t contain a value.")
}
可能,你SaveNewItem()方法返回零。 试试这个: saveNewItem? = SaveNewItem() println(saveNewItem?)
它返回零吗?
它将此视为连续的陈述,不会构建。 –
所以你应该把println放在下一行。我还没有得到堆栈溢出布局,所以我没有把它放在下一行 –
这两个语句都在不同的行上,println语句在另一行。它会产生“连续语句”错误 –
你确定它不是keyWindow具有'nil'值:
所以它现在的工作?这是你强制解开的唯一价值,所以如果不是这条线,我应该感到惊讶。 –
'SaveNewItem'是一个UIViewController,对吧?但它是否出现在Xib或Storyboard中?如果是,它可能有一些'IBOultet'。然后,通过执行'let saveNewItem = SaveNewItem()'''''''''''''''''''''''''''''''''''''''''不是从XIB或Storyboard中调用的,因此所有这些元素都没有链接,并且发现你的“意外地发现了零,同时展开一个可选值”错误。 – Larme
@DávidPásztor是的,我确定它不是keyWindow,它是行: self.present(saveNewItem,animated:true,completion:nil) 这会导致错误。 –