1. ホーム
  2. ios

[解決済み] Swift 2: 呼び出しは投げることができるが、'try'が付いておらず、エラーは処理されない

2022-04-22 06:51:37

質問

Xcode 7 betaをインストールし、SwiftコードをSwift 2に変換した後、コードにいくつかの問題が発生し、それを解決することができません。私はSwift 2が新しいことを知っているので、私は検索し、それについて何もないので、私は質問を書くべきであると考えています。

以下はそのエラーです。

Callは投げることができますが、'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 のように、1つの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()
}