2016-06-13 8 views
0

私のアプリでは、私はAPI呼び出しのための別のクラスを作ろうとしました。ログインボタンをクリックし、そのクラスを別のクラスのメソッドと呼ぶようにします。しかし、私は別のクラスから別のviewcontrollerに行きたいときにクラッシュする。私はViewControllerをを定義する必要がありどこここどのように次のviewControllerに行く

はloginViewController

let mydata = DataControllerLogin() 
    mydata.login(txtemail.text!,password: txtPassword.text!) 

class DataControllerLogin: UIViewController { 

func login(username:String,password:String) 
{ 
    if Reachability.isConnectedToNetwork() == true 
    { 
     let url = "\(basicURL)login" 
     let param : [String : AnyObject] = [ 

      "email" : username, 
      "password" : password 
     ] 

     Alamofire.request(.POST, url, parameters: param, encoding: .JSON).responseObject(completionHandler: { (response:Response<LoginCode, NSError>) in 

      if (response.result.value != nil) 
      { 

       let LoginCode = response.result.value 

       let message = LoginCode?.Message 
       let detail = LoginCode?.result 

       if (LoginCode?.Status == 1) 
       { 
        let controller : LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController 
        self.navigationController?.pushViewController(controller, animated: true) 

        SVProgressHUD.dismiss() 
       } 
       else 
       { 
        alertViewShow(self, title: "Sorry", message: message!) 
        SVProgressHUD.dismiss() 

       } 
       if let threedayForecast = LoginCode?.result { 

        print(threedayForecast.FirstName) 

       } 
      } 
      else 
      { 

      } 
     }) 
    } 
    else { 
     alertViewShow(self, title: "No Internet Connection", message: "Make sure your device is connected to the internet.") 
    } 
} 
} 

が、ライン上でその取得のクラッシュで私のコードです。

あなたは私の問題が何であるかを教えてください知っていればそのそう

exc_bad_instruction (code=exc_i386_invop subcode=0x0) 

のようなエラーを示す

let controller : LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController 
self.navigationController?.pushViewController(controller, animated: true) 

+1

Check LoginViewControllerには、storyboardのidentifer LoginViewControllerがありますか? –

+0

は、同じ識別子が –

+1

で、 "DataControllerLogin"がスタックにないか、ナビゲーションコントローラにないことをすでにチェックしています。 –

答えて

0

ファイルの先頭に記述してください。

import UIKit 
import Alamofire 
import SwiftyJSON 

typealias SOAPICompletionHandler = (code:Int, error:NSError?, response:NSDictionary?) -> Void 

あなたのファイルにメソッドの下に追加します -

func callApi(strApiName:String, param : [String : AnyObject]?, type:String, header:[String : String]?, completionHandler:SOAPICompletionHandler) { 
     //let strURL : String = BASEURL+"/"+strApiName 
     let strURL = strApiName; 
     if type == POSTREQ { 
      Alamofire.request(.POST, strURL, parameters: param, encoding: .JSON, headers: header).responseJSON(completionHandler: { (responseData) -> Void in 
       let isSuccess = JSON(responseData.result.isSuccess) 
       if isSuccess { 
//     let swiftyJson = JSON(responseData.result.value! as! NSDictionary) as! AnyObject 
        completionHandler(code: 1, error: nil, response: responseData.result.value! as? NSDictionary) 
       } else { 
        let error = responseData.result.error! as NSError 
        completionHandler(code: 0, error: error, response: nil) 
       } 
      }) 
     } else if type == GETREQ { 
      Alamofire.request(.GET, strURL, parameters: param, encoding: .JSON, headers: header).responseJSON(completionHandler: { (responseData) -> Void in 
       let isSuccess = JSON(responseData.result.isSuccess) 
       if isSuccess { 
//     let swiftyJson = JSON(responseData.result.value! as! NSDictionary) 
        completionHandler(code: 1, error: nil, response: responseData.result.value! as? NSDictionary) 
       } else { 
        let error = responseData.result.error! as NSError 
        completionHandler(code: 0, error: error, response: nil) 
       } 
      }) 
     } else if type == PUTREQ{ 

      Alamofire.request(.PUT, strURL, parameters: param, encoding: .JSON, headers: header).responseJSON(completionHandler: { (responseData) -> Void in 
       let isSuccess = JSON(responseData.result.isSuccess) 
       if isSuccess { 
        //     let swiftyJson = JSON(responseData.result.value! as! NSDictionary) 
        completionHandler(code: 1, error: nil, response: responseData.result.value! as? NSDictionary) 
       } else { 
        let error = responseData.result.error! as NSError 
        completionHandler(code: 0, error: error, response: nil) 
       } 
      }) 

     } else if type == DELETEREQ{ 

      Alamofire.request(.DELETE, strURL, parameters: param, encoding: .JSON, headers: header).responseJSON(completionHandler: { (responseData) -> Void in 
       let isSuccess = JSON(responseData.result.isSuccess) 
       if isSuccess { 
        //     let swiftyJson = JSON(responseData.result.value! as! NSDictionary) 
        completionHandler(code: 1, error: nil, response: responseData.result.value! as? NSDictionary) 
       } else { 
        let error = responseData.result.error! as NSError 
        completionHandler(code: 0, error: error, response: nil) 
       } 
      }) 

     } 
     else if type == PATCHREQ{ 

      Alamofire.request(.PATCH, strURL, parameters: param, encoding: .JSON, headers: header).responseJSON(completionHandler: { (responseData) -> Void in 
       let isSuccess = JSON(responseData.result.isSuccess) 
       if isSuccess { 
        //     let swiftyJson = JSON(responseData.result.value! as! NSDictionary) 
        completionHandler(code: 1, error: nil, response: responseData.result.value! as? NSDictionary) 
       } else { 
        let error = responseData.result.error! as NSError 
        completionHandler(code: 0, error: error, response: nil) 
       } 
      }) 

     } 
    } 

あなたはAlamofireとSwiftyJSONを追加する必要があります。

希望が最高です。

+0

理由はわかりませんが、viewcontrollerを定義することはできません。それは私にエラー致命的なエラーを与える:予期せず、オプション値をアンラッピングしながらnilが見つかりました –