2014-12-06 1 views
0

간단한 iOS 사용자 시스템 용 웹 서비스를 만들고 있습니다. 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을 구현 didnt가 있다는 것입니다 볼 수있는 유일한 것은 .... 그것은해야

class Connection: NSObject, NSURLConnectionDelegate {...} 

NSURLConnection의 대리자 메서드 중 현재 호출되지 않은 것이 가능할 수 있습니까? 이걸 확인해 봤어?

+1

'NSURLConnectionDelegate'이 드문 오리 입력 대리인이 - 당신이 필요하지 않도록 매개 변수는 그냥 AnyObject' '로 입력한다 당신의 델리게이트 메소드가 호출되기 위해서는 * 적합성을 선언 할 필요가있다. –

+0

테스트를 거쳤습니다. 모두 실행됩니다. – Jeffrey

1

컴파일 된 응용 프로그램에서 이것을 시도한 적이 있습니까? 그 맥락에서 코드는 나를 위해 작동합니다.

놀이터의 실행은 코드가 끝나자 마자 멈 춥니 다. 그래서 비동기 호출이 다시 돌아 오기 위해 아무 것도 없습니다. 놀이터를 만들기 위해 계속 실행, XCPlayground을 가져 와서 바닥에이 줄을 추가 :

XCPSetExecutionShouldContinueIndefinitely() 
+0

예, 앱에서 시도했지만 아무 것도 콘솔에서 출력하지 않습니다. – Jeffrey