2014-12-06 87 views
0

我一直在爲簡單的iOS用戶系統開發Web服務。 PHP查詢完美,但有一個問題 - iOS工作不太好。數據未收到。我如何繼續?這是我的連接類:iOS連接不返回數據

import Foundation 

class Connection: NSObject { 
    var data: NSMutableData = NSMutableData() 

    func login(username: String, password: String) { 
     var url: NSURL = NSURL(string: "localhost/getusers.php?username=" + username + "&password=" + password)! 
     var request: NSURLRequest = NSURLRequest(URL: url) 
     var conn: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)! 
    } 

    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) { 
     println("didReceiveResponse") 
    } 

    func connection(connection: NSURLConnection!, didReceiveData conData: NSData!) { 
     self.data.appendData(conData) 
    } 

    func connectionDidFinishLoading(connection: NSURLConnection!) { 
     println(self.data) 
    } 

    deinit { 
     println("deiniting") 
    } 
} 

這裏它被稱爲地方。

@IBAction func attemptLogin(sender: UIButton) { 
     if(usernameTextField.text == "" || passwordTextField.text == "") { 
      var alert = UIAlertController(title: "Error", message: "Invalid Credentials", preferredStyle: UIAlertControllerStyle.Alert) 
      alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 

      var connection: Connection = Connection() 
      connection.login(usernameTextField.text, password: passwordTextField.text) 
     } 
    } 

最後,這裏的PHP服務:

error_reporting(E_ALL); 
ini_set('display errors', 1); 

$username = 'root'; 
$password = 'root'; 

try { 
    $DBH = new PDO('mysql:host=localhost; dbname=login_test', $username, $password); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $recievedUsername = $_GET['username']; 
    $recievedPassword = $_GET['password']; 

    $data = array($recievedUsername, $recievedPassword); 

    $STH = $DBH->prepare("SELECT id, first_name, last_name FROM `users` WHERE `username` = ? AND `password` = ?"); 
    $STH->execute($data); 

    $row = $STH->fetch(PDO::FETCH_ASSOC); 
    echo json_encode($row); 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

回答

0

嗯,我看到將是你沒有實現NSURLConnectionDelegate上您的課嘛....應該是

class Connection: NSObject, NSURLConnectionDelegate {...} 

可能非NSURLConnection的委託方法當前被調用嗎?你檢查過了嗎?

+1

'NSURLConnectionDelegate'是一種罕見的鴨子類型的代表 - 參數僅僅是類型爲'AnyObject',所以你不一定需要*聲明*符合您的委託方法被調用(雖然這是一個很好的做法)。 – 2014-12-06 20:02:08

+0

經過測試,它們都運行。 – Jeffrey 2014-12-06 21:47:38

1

你在編譯過的應用程序中試過這個嗎?你的代碼在這種情況下適用於我。

一旦遊戲場到達代碼末尾就會停止運行,所以沒有任何異步調用返回。爲了使操場上繼續運行,導入XCPlayground這行添加到底層:

XCPSetExecutionShouldContinueIndefinitely() 
+0

是的,我已經在應用程序中試過了,但沒有任何東西被控制檯輸出。 – Jeffrey 2014-12-06 21:48:21