ios swift nserror

ios - Swift creando NSError Object



(3)

Aquí está mi método de ayuda, que crea un objeto NSError con alguna información de seguimiento de pila adicional:

class Helper { static let errorDomain = "com.example.error" static let errorFuncKey = "com.example.error.function" static let errorFileKey = "com.example.error.file" static let errorLineKey = "com.example.error.line" static func error(_ message: String, record: Bool = true, function: String = #function, file: String = #file, line: Int = #line) -> NSError { let customError = NSError(domain: errorDomain, code: 0, userInfo: [ NSLocalizedDescriptionKey: message, errorFuncKey: function, errorFileKey: file, errorLineKey: line ]) // if (record) { // customError.record() // } return customError } }

Uso:

let error = Helper.error(NSLocalizedString("Unauthorized", comment: "Account not activated"))

Observe las 3 líneas comentadas en la clase de ayuda, esto lo uso para registrar errores en Crashlytics, puede descomentar las líneas anteriores y usar la siguiente extensión para registrar errores en Crashlytics:

extension NSError { func record() { Crashlytics.sharedInstance().recordError(self) } }

Estoy tratando de crear un objeto de error para mostrar al usuario.

let userInfo: [NSObject : AnyObject] = [ "NSLocalizedDescriptionKey" : NSLocalizedString("Unauthorized", comment: ""), "NSLocalizedFailureReasonErrorKey" : NSLocalizedString("Unauthorized", comment: "") ] let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: httpResponse.statusCode, userInfo: userInfo) print("Error in Post: /(err.localizedDescription)")

Desafortunadamente la salida es:

Error in Post: The operation couldn’t be completed.(ShiploopHttpResponseErrorDomain error 401.)

Quiero poder mostrarle al usuario que debe activar su cuenta. ¿¿Algunas ideas??


Creando un error muy simple en Swift 3:

let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"])


Parece que quieres (ver las claves del diccionario):

Swift 2

let userInfo: [NSObject : AnyObject] = [ NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: ""), NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") ]

Swift 3

let userInfo: [AnyHashable : Any] = [ NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") , NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") ]

Luego crea el objeto de error en swift 2 o 3 de esta manera:

let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo) println("Error in Post: /(err.localizedDescription)")

NSLocalizedDescriptionKey y NSLocalizedFailureReasonErrorKey son variables de cadena globales y las claves dentro del diccionario de información de usuario. Los valores son ligeramente diferentes de lo que especificaste:

println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription" println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason"

Me parece una buena práctica consultar la documentación haciendo clic con el botón derecho en la clase (NSError en este caso) y seleccionando "Saltar a definición" dentro de xcode. Todo tipo de preguntas pueden ser respondidas de esta manera. :)