iOS 连接不返回数据



我一直在为一个简单的iOS用户系统制作一个Web服务。PHP查询完美,但有一个问题 - 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();
}

您是否在编译的应用程序中尝试过这个?在这种情况下,您的代码对我有用。

操场的执行在代码结束时立即停止,因此异步调用无需返回。要使游乐场继续运行,请导入XCPlayground并将以下行添加到底部:

XCPSetExecutionShouldContinueIndefinitely()

嗯,我唯一看到的是你没有实现NSURLConnectionDelegate到你的类。它应该是

class Connection: NSObject, NSURLConnectionDelegate {...}
当前是否可能调用了

NSURLConnection 的非委托方法?你检查过这个吗?

最新更新