2016-08-09 32 views
1

當我嘗試註冊時,我收到了正確的回覆。但獲得成功後,我會以可選值的形式崩潰。註冊時出現可選值崩潰

這裏是我的全碼:

var post:NSString = "name=\(Username)&email=\(Email)&phone=\(phonenumb)&password=\(Password)&address=\(address)" 

    NSLog("PostData: %@",post); 

    var url:NSURL = NSURL(string: "http://userregistration.php")! 
    // let url:NSURL = NSURL(string: "http://userregistration.php")! 

    let postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! 

    let postLength:NSString = String(postData.length) 

    let request:NSMutableURLRequest = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.HTTPBody = postData 
    request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("application/json", forHTTPHeaderField: "Accept") 


    let reponseError: NSError? 
    var response: NSURLResponse? 

    do { 
     let urlData = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) 

     if (urlData != nil) { 
      let res = response as! NSHTTPURLResponse!; 

      NSLog("Response code: %ld", res.statusCode); 

      if (res.statusCode >= 200 && res.statusCode < 300) 
      { 
       let responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

       NSLog("Response ==> %@", responseData); 


       do { 
        let jsonData = try NSJSONSerialization.JSONObjectWithData(urlData!, options: []) as! NSDictionary 

        let success:NSInteger = jsonData.valueForKey("success") as! NSInteger 

        //[jsonData[@"success"] integerValue]; 

        NSLog("Success: %ld", success); 

        if(success == 1) 
        { 
         NSLog("Sign Up SUCCESS"); 
         //self.dismissViewControllerAnimated(true, completion: nil) 
        } else { 
         var error_msg:NSString 

         if jsonData["error_message"] as? NSString != nil { 
          error_msg = jsonData["error_message"] as! NSString 
         } else { 
          error_msg = "Unknown Error" 
         } 
         let alertView:UIAlertView = UIAlertView() 
         alertView.title = "Sign Up Failed!" 
         alertView.message = error_msg as String 
         alertView.delegate = self 
         alertView.addButtonWithTitle("OK") 
         alertView.show() 

        } 

       } catch let error as NSError { 
        print("json error: \(error.localizedDescription)") 
       } 



      } else { 
       let alertView:UIAlertView = UIAlertView() 
       alertView.title = "Sign Up Failed!" 
       alertView.message = "Connection Failed" 
       alertView.delegate = self 
       alertView.addButtonWithTitle("OK") 
       alertView.show() 
      } 
     } 

    } 
} 

,我在這行越來越崩潰:

let success:NSInteger = jsonData.valueForKey("success") as! NSInteger 

的錯誤是期權價值crash.I不知道如何處理這種error.Does任何專家請給我一些想法或一些解決方案來糾正這次崩潰

+0

因爲'jsonData.valueForKey( 「成功」)'是nill。檢查你的迴應。 –

+0

這意味着什麼我需要chnage – mack

+0

'Response ==> {「status」:1,「message」:「註冊成功。」,「CustomerId」:2} 2016-08-09 12:39:02.228 M-Commerce [1454:71029]錯誤是下一行:140725375544912 致命錯誤:意外地發現零,同時展開一個可選值 ' – mack

回答

0

始終使用安全解包,並且不要直接嘗試解包/轉換可能爲零的值。

正確方法是 -

if let successVal = jsonData["success"] as? NSInteger { 
    //Do something with successVal. 
} 

雖然不直接關係到你的問題,本想點你使用過時NSURLConnection的API,而不是使用基於NSURLSession API進行聯網。

感謝

0

在反應看您將不會收到任何success但只有status你確定你沒有檢查該值?

此外,我建議你到你的代碼移到類似:

guard let success = jsonData.valueForKey("success") as? Int else { 
asset('Check your response, is missing success key') 
return 
} 
相關問題