在我安装了Xcode7测试版并将我的快速代码转换成SWIFT 2之后,我遇到了一些我无法解决的代码问题.我知道SWIFT 2是新的,所以我搜索了一下,想既然没有关于它的任何东西,我应该写一个问题.

Here is the error:

调用可以引发,但它没有标记为"try",错误也不是 已处理

Code:

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 _ {
        }

    }

Snapshot:在此处输入图像描述

推荐答案

您必须捕获错误,就像您已经对save()Call所做的那样,并且因为您在这里处理多个错误,所以您可以在单个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在下面的 comments 中指出的那样,通常更好的做法是不要捕捉抛出错误的地方.可以将该方法标记为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()
}

Ios相关问答推荐

如何让AVAudio.installTap()每秒回调125次

缺少预期的键:';NSPrival yCollectedDataTypes';

Jenkins node 无法运行fastlane命令-未找到命令

自定义油漆圆角三角形

如何防止UITest套件与Fastlane一起执行?

为什么 Swift 不在启动的同一线程上恢复异步函数?

如何以编程方式触发 SwiftUI DatePicker?

iOS 16 堆栈视图中按钮的奇怪动画

SwiftUI Select 器值在超过最大值时重置

SwiftUI Disclosure Group 文本对齐

迁移到 UIKit 生命周期的应用程序不会调用 SceneDelegate

如何在不支持并发的自动关闭中修复'async'调用?

使用swift将图像转换为A4大小的pdf

以编程方式获取故事板 ID?

什么是伞头?

单击 GoogleSignIn 按钮时应用程序崩溃

Swift - 获取设备的 WIFI IP 地址

如何防止 iOS 设备上的显示屏变暗和关闭?

如何在 iOS 中获取正在运行的应用程序的名称

Xcode 5 和 iOS 7:架构和有效架构