这个问题在这里已有答案:
我正在用Swift构建一个应用程序。我的课程中有这个代码:
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
}
If-Let语句检查UrlCoreDataController.shared.loadUrl()
是否返回nil然后它不会在花括号内执行代码而你的应用程序将不会崩溃。
无法在NSManagedObject类'Url'上调用指定的初始值设定项
这意味着类Url
没有指定初始化程序。在简单的世界中,你需要在init()
类中创建一个Url
例如。
class Url: NSObject {
//variables
//initializer
init() {
}
}
有关Initializer的信息,请参阅this
loadUrl()方法可以返回nil值。
为此,您可以使用guard语句或使用可选绑定
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.")
}
处理选项的可能方法很少:
如果让
if let url = UrlCoreDataController.shared.loadUrl() {
url = url
self.setupLuci()
}
2.guard:
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
}
我主要使用第一种选择。