我遇到问题并尝试将xcode更新到版本8.3.2。代码正在运行,但在更新之后不再了。它符合以下代码:
func saveContext() -> NSError?{// It saving
do {
if context == context {
try context.save()
// taskNameTextField.text=nil
}
} catch let error as! NSError? {
print("error saving core data: \(error)")
return error
}
return nil
} //
有人可以帮助我吗?
答案 0 :(得分:2)
事实证明,当从Swift 2更新到Swift 3时,Apple转换器无法捕获代码中的所有问题。您需要自己更新一些内容。它没有捕获的一件事是对NSError的所有引用。它错过了几个需要将NSError转换为Error的地方。
func saveContext() -> Error?{ // remove the `NS` from Error here.
do {
if context == context { // this is always true, remove it.
try context.save()
}
} catch { // remove the `let error as! NSError?` from here
print("error saving core data: \(error)")
return error
}
return nil
}
此功能的简单版本是:
func saveContext() -> Error? {
do {
try context.save()
return nil
} catch {
return error
}
}
或实施catch
一级,然后变为:
func saveContext() throws {
try context.save()
}
答案 1 :(得分:2)
使用批量捕获处理错误 您可以使用do-catch语句通过运行代码块来处理错误。如果do子句中的代码引发错误,则将其与catch子句进行匹配,以确定其中哪一个可以处理该错误。
这是do-catch语句的一般形式:
do {
try expression
// statements
} catch pattern 1 {
// statements
} catch pattern 2 where condition {
//statements
} catch {
// statements
}
您必须编写与“ Switch_case”默认值相同的最后一个默认“ catch” Blok:
答案 2 :(得分:0)
这是Swift 4.2中的解决方案
func saveContext() -> NSError? {
do {
try managedContext.save()
} catch let error as NSError {
print("error saving core data: \(error) \(error.description)")
return error
}
return nil
}