Errortype' Is Not Convertible to 'Nserror'

ErrorType' is not convertible to 'NSError'

For me, this also happens when using AVFoundation and Core Data in the same project.

To get rid of the error:

'ErrorType' is not convertible to 'NSError'; did you mean to use 'as!' to force downcast?

Or the warnings:

Conditional cast from 'ErrorType' to 'NSError' always succeeds

Forced cast from 'ErrorType' to 'NSError' always succeeds; did you mean to use 'as'?

I did this:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
// The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
// Create the coordinator and store
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("MY_APP_NAME.sqlite")
var failureReason = "There was an error creating or loading the application's saved data."
do {
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
} catch let error as NSError {
// Report any error we got.
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
dict[NSLocalizedFailureReasonErrorKey] = failureReason

dict[NSUnderlyingErrorKey] = error
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
abort()
} catch {
// dummy
}

return coordinator
}()

Hope this helps :)

Casting CustomError to ErrorType to NSError loses userInfo

Seems like preventing the compiler magic that casts ErrorType to NSError works well:

((error as Any) as! NSError).localizedDescription // "A great description"

Downcasting Core Data error

What if you change your catch to include a pattern match on NSError errors?

do {
} catch let e as NSError {
// handle NSError case
} catch {
}

Since your block can now throw, you will have to change your function like this:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = try? { () throws in
// your code
}


Related Topics



Leave a reply



Submit