当前位置: 首页 > 面试题库 >

Swift 2:通话可能引发,但未标记为“ try”且未处理错误

爱博达
2023-03-14
问题内容

在安装Xcode 7 Beta并将Swift代码转换为Swift 2之后,我遇到了一些我无法弄清楚的代码问题。我知道Swift
2是新手,所以我搜索并找出了答案,因为没有任何相关内容,我应该写一个问题。

这是错误:

可以抛出呼叫,但未将其标记为“ try”,并且未处理错误

码:

func deleteAccountDetail(){
        let entityDescription = NSEntityDescription.entityForName("AccountDetail", inManagedObjectContext: Context!)
        let request = NSFetchRequest()
        request.entity = entityDescription

        //The Line Below is where i expect the error
        let fetchedEntities = self.Context!.executeFetchRequest(request) as! [AccountDetail]

        for entity in fetchedEntities {
        self.Context!.deleteObject(entity)
        }

        do {
            try self.Context!.save()
        } catch _ {
        }

    }

快照: 在此处输入图片说明


问题答案:

您必须像save()处理呼叫一样捕获错误,并且由于您要在此处处理多个错误,因此可以try在一个do-catch块中依次进行多个调用,如下所示:

func deleteAccountDetail() {
    let entityDescription = NSEntityDescription.entityForName("AccountDetail", inManagedObjectContext: Context!)
    let request = NSFetchRequest()
    request.entity = entityDescription

    do {
        let fetchedEntities = try self.Context!.executeFetchRequest(request) as! [AccountDetail]

        for entity in fetchedEntities {
            self.Context!.deleteObject(entity)
        }

        try self.Context!.save()
    } catch {
        print(error)
    }
}

或如@
bames53在下面的注释中指出的,通常最好的做法是不要在引发错误的地方捕获错误。您可以将方法标记为,throws然后try调用该方法。例如:

func deleteAccountDetail() throws {
    let entityDescription = NSEntityDescription.entityForName("AccountDetail", inManagedObjectContext: Context!)
    let request = NSFetchRequest()

    request.entity = entityDescription

    let fetchedEntities = try Context.executeFetchRequest(request) as! [AccountDetail]

    for entity in fetchedEntities {
        self.Context!.deleteObject(entity)
    }

    try self.Context!.save()
}


 类似资料:
  • 在我安装Xcode 7 beta并将我的swift代码转换为Swift 2后,我对代码有一些无法解决的问题。我知道Swift 2是新的,所以我搜索并弄清楚,因为没有关于它的任何内容,我应该写一个问题。 以下是错误: 调用可以抛出,但未标有“try”,并且不处理错误 法典:

  • 问题内容: 我正在尝试使用swiftyjson,但出现错误: 可以抛出呼叫,但是标记为“ try”,并且未处理错误。 我已验证我的源JSON很好。我一直在搜索,找不到解决此问题的方法 谢谢您的帮助! 问题答案: 您应该将其包装成一个块。在您的情况下:

  • 下面是我的代码片段: 现在java用'unhandled exception type SQLException)标记指示语句(以及后面的所有语句)。gfsql.dosql抛出此异常并定义为: public ResultSet doSQL(String sqlCommand)抛出SQLException{ 有趣的是--如果我像这样重复“catch”块: 未标记“未处理”错误。(但是,重复的catc

  • 问题内容: 我正在尝试使用try-catch捕获SQL查询(而不是存储过程)中的错误。 由于某种原因,这无法处理我的错误,但我仍然得到: 消息213,级别16,状态1,第29行列名或提供的值数与表定义不匹配。 有什么帮助吗? 问题答案: 您有一个编译时错误,无法在try-catch中捕获。 BooksOnline: 编译和语句级重新编译错误 如果错误在与TRY-ATCH构造相同的执行级别中发生,则

  • 问题内容: 在Angular应用程序中,我们有一个解决承诺的模式,直到Angular 1.6.0为止,我们的服务一直很好: 这就是我们如何触发业力中的错误: 现在,随着更新至1.6.0,Angular突然在我们的单元测试中(在Karma中)抱怨带有“可能未处理的拒绝”错误的拒绝承诺。但是,我们正在处理第二个调用错误服务的函数中的拒绝。 Angular在这里到底要寻找什么?它希望我们如何“处理”拒绝

  • 你有什么想法吗??我不知道该怎么办了:/ 13449[MyScheduler_Worker-1]错误org.quartz.core.jobrunshell-Job group1.jobreport引发了一个未处理的异常:java.lang.nullpointerexception at com.changes.bean.reportsbean.createpdfCriticalChanges(re