mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-25 10:51:59 +01:00
WIP: error handling
This commit is contained in:
@@ -44,10 +44,6 @@ class CoreStoreTests: XCTestCase {
|
|||||||
|
|
||||||
func testExample() {
|
func testExample() {
|
||||||
|
|
||||||
let err = CoreStoreError.DifferentStorageExistsAtURL(existingPersistentStoreURL: NSURL(string: "http://google.com")!)
|
|
||||||
let err1 = err as NSError
|
|
||||||
let err2 = err1 as! CoreStoreError
|
|
||||||
|
|
||||||
let stack = DataStack(modelName: "Model", bundle: NSBundle(forClass: self.dynamicType))
|
let stack = DataStack(modelName: "Model", bundle: NSBundle(forClass: self.dynamicType))
|
||||||
CoreStore.defaultStack = stack
|
CoreStore.defaultStack = stack
|
||||||
XCTAssert(CoreStore.defaultStack === stack, "CoreStore.defaultStack === stack")
|
XCTAssert(CoreStore.defaultStack === stack, "CoreStore.defaultStack === stack")
|
||||||
|
|||||||
@@ -44,12 +44,12 @@ public enum CoreStoreError: ErrorType, CustomStringConvertible, CustomDebugStrin
|
|||||||
/**
|
/**
|
||||||
An `NSMappingModel` could not be found for a specific source and destination model versions.
|
An `NSMappingModel` could not be found for a specific source and destination model versions.
|
||||||
*/
|
*/
|
||||||
case MappingModelNotFound(storage: LocalStorage, targetModel: NSManagedObjectModel, targetModelVersion: String)
|
case MappingModelNotFound(localStoreURL: NSURL, targetModel: NSManagedObjectModel, targetModelVersion: String)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Progressive migrations are disabled for a store, but an `NSMappingModel` could not be found for a specific source and destination model versions.
|
Progressive migrations are disabled for a store, but an `NSMappingModel` could not be found for a specific source and destination model versions.
|
||||||
*/
|
*/
|
||||||
case ProgressiveMigrationRequired(storage: LocalStorage)
|
case ProgressiveMigrationRequired(localStoreURL: NSURL)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An internal SDK call failed with the specified `NSError`.
|
An internal SDK call failed with the specified `NSError`.
|
||||||
@@ -87,7 +87,7 @@ public enum CoreStoreError: ErrorType, CustomStringConvertible, CustomDebugStrin
|
|||||||
public var description: String {
|
public var description: String {
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
return (self as NSError).description
|
return self.objc.description
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -198,7 +198,11 @@ internal extension ErrorType {
|
|||||||
return error
|
return error
|
||||||
}
|
}
|
||||||
|
|
||||||
let error = self as NSError
|
guard let error = (self as Any) as? NSError else {
|
||||||
|
|
||||||
|
return .Unknown
|
||||||
|
}
|
||||||
|
|
||||||
guard error.domain == "com.corestore.error" else {
|
guard error.domain == "com.corestore.error" else {
|
||||||
|
|
||||||
return .InternalError(NSError: error)
|
return .InternalError(NSError: error)
|
||||||
@@ -223,22 +227,20 @@ internal extension ErrorType {
|
|||||||
return .DifferentStorageExistsAtURL(existingPersistentStoreURL: existingPersistentStoreURL)
|
return .DifferentStorageExistsAtURL(existingPersistentStoreURL: existingPersistentStoreURL)
|
||||||
|
|
||||||
case .MappingModelNotFound:
|
case .MappingModelNotFound:
|
||||||
guard let persistentStore = info["persistentStore"] as? NSPersistentStore,
|
guard let localStoreURL = info["localStoreURL"] as? NSURL,
|
||||||
let storage = persistentStore.storageInterface as? LocalStorage,
|
|
||||||
let targetModel = info["targetModel"] as? NSManagedObjectModel,
|
let targetModel = info["targetModel"] as? NSManagedObjectModel,
|
||||||
let targetModelVersion = info["targetModelVersion"] as? String else {
|
let targetModelVersion = info["targetModelVersion"] as? String else {
|
||||||
|
|
||||||
return .Unknown
|
return .Unknown
|
||||||
}
|
}
|
||||||
return .MappingModelNotFound(storage: storage, targetModel: targetModel, targetModelVersion: targetModelVersion)
|
return .MappingModelNotFound(localStoreURL: localStoreURL, targetModel: targetModel, targetModelVersion: targetModelVersion)
|
||||||
|
|
||||||
case .ProgressiveMigrationRequired:
|
case .ProgressiveMigrationRequired:
|
||||||
guard let persistentStore = info["persistentStore"] as? NSPersistentStore,
|
guard let localStoreURL = info["localStoreURL"] as? NSURL else {
|
||||||
let storage = persistentStore.storageInterface as? LocalStorage else {
|
|
||||||
|
|
||||||
return .Unknown
|
return .Unknown
|
||||||
}
|
}
|
||||||
return .ProgressiveMigrationRequired(storage: storage)
|
return .ProgressiveMigrationRequired(localStoreURL: localStoreURL)
|
||||||
|
|
||||||
case .InternalError:
|
case .InternalError:
|
||||||
guard case let NSError as NSError = info["NSError"] else {
|
guard case let NSError as NSError = info["NSError"] else {
|
||||||
@@ -246,26 +248,25 @@ internal extension ErrorType {
|
|||||||
return .Unknown
|
return .Unknown
|
||||||
}
|
}
|
||||||
return .InternalError(NSError: NSError)
|
return .InternalError(NSError: NSError)
|
||||||
|
|
||||||
default:
|
|
||||||
return .Unknown
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal var objc: NSError {
|
internal var objc: NSError {
|
||||||
|
|
||||||
|
let domain = "com.corestore.error"
|
||||||
guard let error = self as? CoreStoreError else {
|
guard let error = self as? CoreStoreError else {
|
||||||
|
|
||||||
return self as NSError
|
return ((self as Any) as? NSError)
|
||||||
|
?? NSError(domain: domain, code: CoreStoreError.Code.Unknown.rawValue, userInfo: [:])
|
||||||
}
|
}
|
||||||
|
|
||||||
let domain = "com.corestore.error"
|
|
||||||
let code: CoreStoreError.Code
|
let code: CoreStoreError.Code
|
||||||
let info: [NSObject: AnyObject]
|
let info: [NSObject: AnyObject]
|
||||||
switch error {
|
switch error {
|
||||||
|
|
||||||
case .Unknown:
|
case .Unknown:
|
||||||
return self as NSError
|
code = .Unknown
|
||||||
|
info = [:]
|
||||||
|
|
||||||
case .DifferentStorageExistsAtURL(let existingPersistentStoreURL):
|
case .DifferentStorageExistsAtURL(let existingPersistentStoreURL):
|
||||||
code = .DifferentStorageExistsAtURL
|
code = .DifferentStorageExistsAtURL
|
||||||
@@ -273,31 +274,25 @@ internal extension ErrorType {
|
|||||||
"existingPersistentStoreURL": existingPersistentStoreURL
|
"existingPersistentStoreURL": existingPersistentStoreURL
|
||||||
]
|
]
|
||||||
|
|
||||||
case .MappingModelNotFound(let storage, let targetModel, let targetModelVersion):
|
case .MappingModelNotFound(let localStoreURL, let targetModel, let targetModelVersion):
|
||||||
code = .MappingModelNotFound
|
code = .MappingModelNotFound
|
||||||
info = [
|
info = [
|
||||||
"storage": storage.objc,
|
"localStoreURL": localStoreURL,
|
||||||
"targetModel": targetModel,
|
"targetModel": targetModel,
|
||||||
"targetModelVersion": targetModelVersion
|
"targetModelVersion": targetModelVersion
|
||||||
]
|
]
|
||||||
|
|
||||||
case .ProgressiveMigrationRequired:
|
case .ProgressiveMigrationRequired(let localStoreURL):
|
||||||
guard let persistentStore = info["persistentStore"] as? NSPersistentStore,
|
code = .ProgressiveMigrationRequired
|
||||||
let storage = persistentStore.storageInterface as? LocalStorage else {
|
info = [
|
||||||
|
"localStoreURL": localStoreURL
|
||||||
return .Unknown
|
]
|
||||||
}
|
|
||||||
return .ProgressiveMigrationRequired(storage: storage)
|
|
||||||
|
|
||||||
case .InternalError:
|
case .InternalError(let NSError):
|
||||||
guard case let NSError as NSError = info["NSError"] else {
|
code = .InternalError
|
||||||
|
info = [
|
||||||
return .Unknown
|
"NSError": NSError
|
||||||
}
|
]
|
||||||
return .InternalError(NSError: NSError)
|
|
||||||
|
|
||||||
default:
|
|
||||||
return self as NSError
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NSError(domain: domain, code: code.rawValue, userInfo: info)
|
return NSError(domain: domain, code: code.rawValue, userInfo: info)
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ public extension DataStack {
|
|||||||
guard let migrationSteps = self.computeMigrationFromStorage(storage, metadata: metadata) else {
|
guard let migrationSteps = self.computeMigrationFromStorage(storage, metadata: metadata) else {
|
||||||
|
|
||||||
let error = CoreStoreError.MappingModelNotFound(
|
let error = CoreStoreError.MappingModelNotFound(
|
||||||
storage: storage,
|
localStoreURL: fileURL,
|
||||||
targetModel: self.model,
|
targetModel: self.model,
|
||||||
targetModelVersion: self.modelVersion
|
targetModelVersion: self.modelVersion
|
||||||
)
|
)
|
||||||
@@ -358,7 +358,7 @@ public extension DataStack {
|
|||||||
|
|
||||||
if migrationSteps.count > 1 && storage.localStorageOptions.contains(.PreventProgressiveMigration) {
|
if migrationSteps.count > 1 && storage.localStorageOptions.contains(.PreventProgressiveMigration) {
|
||||||
|
|
||||||
let error = CoreStoreError.ProgressiveMigrationRequired(storage: storage)
|
let error = CoreStoreError.ProgressiveMigrationRequired(localStoreURL: fileURL)
|
||||||
CoreStore.log(
|
CoreStore.log(
|
||||||
error,
|
error,
|
||||||
"Failed to find migration mapping from the \(typeName(storage)) at URL \"\(fileURL)\" to version model \"\(self.modelVersion)\" without requiring progessive migrations."
|
"Failed to find migration mapping from the \(typeName(storage)) at URL \"\(fileURL)\" to version model \"\(self.modelVersion)\" without requiring progessive migrations."
|
||||||
@@ -393,7 +393,7 @@ public extension DataStack {
|
|||||||
guard let migrationSteps = self.computeMigrationFromStorage(storage, metadata: metadata) else {
|
guard let migrationSteps = self.computeMigrationFromStorage(storage, metadata: metadata) else {
|
||||||
|
|
||||||
let error = CoreStoreError.MappingModelNotFound(
|
let error = CoreStoreError.MappingModelNotFound(
|
||||||
storage: storage,
|
localStoreURL: storage.fileURL,
|
||||||
targetModel: self.model,
|
targetModel: self.model,
|
||||||
targetModelVersion: self.modelVersion
|
targetModelVersion: self.modelVersion
|
||||||
)
|
)
|
||||||
@@ -421,7 +421,7 @@ public extension DataStack {
|
|||||||
}
|
}
|
||||||
else if numberOfMigrations > 1 && storage.localStorageOptions.contains(.PreventProgressiveMigration) {
|
else if numberOfMigrations > 1 && storage.localStorageOptions.contains(.PreventProgressiveMigration) {
|
||||||
|
|
||||||
let error = CoreStoreError.ProgressiveMigrationRequired(storage: storage)
|
let error = CoreStoreError.ProgressiveMigrationRequired(localStoreURL: storage.fileURL)
|
||||||
CoreStore.log(
|
CoreStore.log(
|
||||||
error,
|
error,
|
||||||
"Failed to find migration mapping from the \(typeName(storage)) at URL \"\(storage.fileURL)\" to version model \"\(self.modelVersion)\" without requiring progessive migrations."
|
"Failed to find migration mapping from the \(typeName(storage)) at URL \"\(storage.fileURL)\" to version model \"\(self.modelVersion)\" without requiring progessive migrations."
|
||||||
|
|||||||
Reference in New Issue
Block a user