无法将type()的值转换为预期的参数类型bool(Swift)?

时间:2017-04-07 14:13:32

标签: ios swift xcode

我有以下代码:

func saveContext () {
    var error: NSError? = nil
    let managedObjectContext = self.managedObjectContext
    if managedObjectContext != nil {
        if managedObjectContext.hasChanges && !managedObjectContext.save(){
            abort()
        }
    }
}

我有两个错误:调用可以抛出,但没有标记为try并且未处理错误。另一个说不能将type()的值转换为预期的参数类型' Bool'。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

NSManagedObjectContext save()的文档具有误导性。它在Swift中实际上没有返回值。相反,它可能会引发错误。

您的两个错误是因为您忽略了throws并将其视为返回Bool

您的代码必须类似于:

func saveContext () {
    var error: NSError? = nil
    let managedObjectContext = self.managedObjectContext
    if managedObjectContext != nil {
        if managedObjectContext.hasChanges {
            do {
                try managedObjectContext.save()
            } catch {
                print("Unable to save: \(error)")
                abort()
            }
        } else {
            abort()
        }
    }
}

答案 1 :(得分:0)

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedContext = appDelegate.persistentContainer.viewContext

    do {
        try managedContext.save()

    } catch let error as NSError {
        print("Could not save. \(error), \(error.userInfo)")
    }