NSJSONSerialization.JSONObjectWithData导致应用程序在alamofire迁移后崩溃

时间:2016-04-22 13:17:16

标签: ios swift alamofire

我是iOS和快速开发的新手。我最近将alamofire lib迁移到了V3.0,导致代码错误。我设法解决了所有问题。然而,最后一个问题。我有一个名为Webservices的类用于调用Web服务。它有一个名为postCustomLogin的方法。在我的一个视图控制器中,我调用它,当我运行应用程序时,它在此行崩溃:

Set objShell = CreateObject("Wscript.Shell")
objShell.Run("powershell.exe -noexit .\test.ps1")

这是函数的定义:

errorCode = try NSJSONSerialization.JSONObjectWithData(result.value as! NSData , options:NSJSONReadingOptions.AllowFragments ) as! NSString

这就是我调用函数的地方:

class func postCustomLogin(email: String, password: String, completionHandler: ( Result<AnyObject, NSError>) -> Void) {
 Alamofire.request(.POST, baseURL + "CustomLogin", parameters: ["email": email, "password": password])
        .validate()
        .responseJSON {(response) in
            if (response.result.isSuccess) {
                if let jsonDict = response.result.value as? NSDictionary {
                   User.createEntityWithDictionnary(jsonDict)
                    //Save                    NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait()
                }
            }
            completionHandler(response.result)
    }
}

1 个答案:

答案 0 :(得分:1)

您正在强制解开您的期权。如果您的result.value不是NSData,或try NSJSONSerialization.JSONObjectWithData(result.value as! NSData , options:NSJSONReadingOptions.AllowFragments ) as! NSString//crash不是NSString您的应用崩溃。尝试使用此代码进行安全解包:

if let resultData = result.value as? NSData{
    if let anErrorCode = try NSJSONSerialization.JSONObjectWithData(resultData , options:NSJSONReadingOptions.AllowFragments ) as? NSString
    error = anErrorCode
    ....
    ....
}