J'essaie de créer un objet d'erreur à afficher à l'utilisateur.
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)")
Malheureusement, la sortie est:
Error in Post: The operation couldn’t be completed.(ShiploopHttpResponseErrorDomain error 401.)
Je veux pouvoir montrer à l'utilisateur qu'il doit activer son compte. Des idées??
On dirait que vous voulez (voir les touches du dictionnaire):
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: "")
]
Créez ensuite l'objet d'erreur dans les deux Swift 2 ou 3 comme ceci:
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo)
println("Error in Post: \(err.localizedDescription)")
NSLocalizedDescriptionKey et NSLocalizedFailureReasonErrorKey sont des variables de chaîne globales et les clés à l'intérieur du dictionnaire userInfo. Les valeurs sont légèrement différentes de celles que vous avez spécifiées:
println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription"
println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason"
Je trouve bon de consulter la documentation en cliquant avec le bouton droit sur la classe (NSError dans ce cas) et en sélectionnant "Aller à la définition" dans xcode. On peut répondre à toutes sortes de questions de cette façon. :)
Création d'une erreur très simple dans Swift 3:
let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"])
La création d'une erreur est aussi simple que la ligne suivante:
let error = NSError(domain: "com.example.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "message"])
Si vous avez besoin d'informations de trace de pile supplémentaires, utilisez la méthode suivante:
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
}
tilisation:
let localizedErrorMessage: String = NSLocalizedString("Unauthorized", comment: "Account not activated")
let error = error(localizedErrorMessage)