Ios 在Swift应用程序中展开可选值时意外发现nil
我正在用Swift构建一个应用程序。 我班上有以下代码:Ios 在Swift应用程序中展开可选值时意外发现nil,ios,swift,Ios,Swift,我正在用Swift构建一个应用程序。 我班上有以下代码: var url : Url? = Url() 在ViewDidLoad()方法中,我有以下内容: override func viewDidLoad() { super.viewDidLoad() //recuper ip di arduino url = UrlCoreDataController.shared.loadUrl()! self.setUpLuci()
var url : Url? = Url()
在ViewDidLoad()方法中,我有以下内容:
override func viewDidLoad() {
super.viewDidLoad()
//recuper ip di arduino
url = UrlCoreDataController.shared.loadUrl()!
self.setUpLuci()
// self.tabella.dataSource = self
// self.tabella.delegate = self
}
loadUrl()方法可以返回nil值
因此,如果该方法返回nil值,则我有以下错误:
2018-03-06 12:29:47.150240+0100 ArduinoHomeKit_bis[2318:1060982] [error] error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Url'
CoreData: error: CoreData: error: Failed to call designated initializer on NSManagedObject class ‘Url'
如何更改代码?像这样更新代码
override func viewDidLoad() {
super.viewDidLoad()
//recuper ip di arduino
if let _url = UrlCoreDataController.shared.loadUrl() {
url = _url
self.setUpLuci()
}
// self.tabella.dataSource = self
// self.tabella.delegate = self
}
若让语句检查UrlCoreDataController.shared.loadUrl()
是否返回nil,那个么它将不会在花括号内执行代码,你们的应用程序也不会崩溃
未能调用NSManagedObject类“Url”上的指定初始值设定项
这意味着类Url
没有指定的初始值设定项。
在简单世界中,您需要在Url
类中创建init()
例如
class Url: NSObject {
//variables
//initializer
init() {
}
}
关于初始值设定项,请参阅
loadUrl()方法可以返回nil值
为此,您可以使用guard语句或使用可选Bing
guard let url = UrlCoreDataController.shared.loadUrl() else {
print("url is not available.")
return;
}
//here you have url
print(url)
或
if let url = UrlCoreDataController.shared.loadUrl() {
print(url)
} else {
print("url is not available.")
}
有几种可能的方法来处理选项:
1.如果让
if let url = UrlCoreDataController.shared.loadUrl() {
url = url
self.setupLuci()
}
2.2.2:
guard let url = UrlCoreDataController.shared.loadUrl() {
// do something here if url is nil
return
}
// and here if url is not nil
3.if声明
if url != nil {
// do here Your stuff
}
我主要使用第一个选项。不需要支持变量,例如\u url
,您可以在可选的局部范围展开中定义另一个url
变量,只需执行url=url
。是的,您需要这样做,因为这是从可选变量展开值的推荐方法。您是get异常,因为您试图从可选变量中获取值,而值为nil。您误解了我的意思。我没有说应该使用可选绑定,我只是说不需要用不同的名称声明临时变量。如果让url=UrlCoreDataController.shared.loadUrl(){url=url;self.setUpLuci()}
,您可以执行。哈哈哈,是啊,我误解了,因为我以为您创建了一个有目的的变量,这就是我创建新变量的原因。