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)")

Por desgracia, el resultado es:

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

Quiero ser capaz de mostrar al usuario de que debe activar su cuenta. Alguna idea??

InformationsquelleAutor Ehab Saifan | 2015-10-15

3 Comentarios

  1. 29

    Se ve como se desee (ver diccionario de claves):

    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: "")
            ]

    A continuación, crear el objeto de error en ambos swift 2 o 3 como este:

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

    NSLocalizedDescriptionKey y NSLocalizedFailureReasonErrorKey son globales las variables de Cadena, y las llaves dentro de la userInfo diccionario. Los valores son ligeramente diferentes de lo que se especifica:

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

    Me parece una buena práctica para mirar la documentación haciendo clic derecho en la clase (NSError en este caso) y seleccionando la opción «Saltar A la Definición de» dentro de xcode. Todos los tipos de preguntas que pueden ser respondidas de esta manera. 🙂

    • También podría tener sentido para crear su propia clase de error heredando de NSError y, a continuación, reemplazar la función de captador para localizedDescription.
    • La cosa es que debo subclase NSError a ser capaz de costumbre «NSLocalizedDescriptionKey» para mostrar mi mensaje personalizado. Soy nuevo en Swift y programación. Así que voy a tener que cavar para saber cómo Implementar esta 🙂 thx por tu respuesta
  2. 24

    La creación de un simple error en Swift 3:

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

    La creación de un error es tan simple como la siguiente línea:

    let error = NSError(domain: "com.example.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "message"])

    Si necesita más información de seguimiento de pila, utilice el método siguiente:

    func error(_ message: String, code: Int = 0, domain: String = "com.example.error", function: String = #function, file: String = #file, line: Int = #line) -> NSError {
    
        let functionKey = "\(domain).function"
        let fileKey = "\(domain).file"
        let lineKey = "\(domain).line"
    
        let error = NSError(domain: domain, code: code, userInfo: [
            NSLocalizedDescriptionKey: message,
            functionKey: function,
            fileKey: file,
            lineKey: line
        ])
    
        //Crashlytics.sharedInstance().recordError(error)
    
        return error
    }

    Uso:

    let localizedErrorMessage: String = NSLocalizedString("Unauthorized", comment: "Account not activated")
    let error = error(localizedErrorMessage)

Dejar respuesta

Please enter your comment!
Please enter your name here