Изпращане на POST заявка в swift 2

Създавам приложение за влизане и когато някога намеря начин да изпратя POST заявка до php и го опитам, има или грешка, или няма грешки, но не изпълнява моя php скрипт. Благодаря предварително. Използвам mac с OS X El Capitan с XCODE 7 и Swift 2. Сървърът ми е стар Windows компютър с WAMPServer.

    import UIKit
 class Login: UIViewController {
@IBOutlet weak var UserName: UITextField!
@IBOutlet weak var PassWord: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?){
      UserName.resignFirstResponder()
    view.endEditing(true)
    super.touchesBegan(touches, withEvent: event)
}
   @IBAction func LoginTapped(sender: AnyObject) {
    var UserNameEntered = UserName.text
    var PassWordEntered = PassWord.text
    let ClientUserNameStored = NSUserDefaults.standardUserDefaults().stringForKey("UserName");
    let ClientPassWordStored = NSUserDefaults.standardUserDefaults().stringForKey("PassWord");
    if(ClientUserNameStored != UserNameEntered && PassWordEntered != ClientPassWordStored || ClientUserNameStored != UserNameEntered && PassWordEntered == ClientPassWordStored || ClientUserNameStored == UserNameEntered && ClientPassWordStored != PassWordEntered){
        print("Not equal")
        var Alert = UIAlertController(title: "Warning", message: "Invalid username or password!", preferredStyle: UIAlertControllerStyle.Alert)

        Alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action: UIAlertAction!) in UserNameEntered = ""; PassWordEntered = "";
        }))
        presentViewController(Alert, animated: true, completion: nil)
    }else{
        let request = NSMutableURLRequest(URL: NSURL(string: "http://host/my/file.php")!)
        request.HTTPMethod = "POST"
        let postString = "username=\(UserNameEntered)&password=\(PassWordEntered)"
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in

            if error != nil {
                print("error=\(error)")
                return
            }

            print("response = \(response)")

            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = \(responseString)")
        }
        task.resume()

                  self.performSegueWithIdentifier("GoToHome", sender: self)

    }
}

}

Моят PHP код е по-долу.

<?php
$postVar = $_POST['username'];
$postVartwo = $_POST['password'];
$file = fopen("test.txt", "a");
echo fwrite($file, $postVar."pass".$postVartwo);
fclose($file);
?>

person Anonymous    schedule 04.10.2015    source източник
comment
Трябва да дадете много повече информация, ако искате отговор. Каква грешка, какъв код и т.н., и т.н.   -  person Toby Allen    schedule 04.10.2015
comment
Не получавам никакви грешки.   -  person Anonymous    schedule 04.10.2015
comment
Тогава няма да получите никакви отговори! :)   -  person Toby Allen    schedule 04.10.2015
comment
Току-що добавих моя код.   -  person Anonymous    schedule 04.10.2015
comment
Какво се случва, когато публикувате данни на вашата php страница от браузър? Настройте формуляр, за да тествате вашата php страница и да се уверите, че работи.   -  person Toby Allen    schedule 04.10.2015
comment
когато тествах php в браузъра с html формуляр, php кодът се изпълнява и прави това, което искам.   -  person Anonymous    schedule 04.10.2015
comment
поставихте ли точка на прекъсване във вашия блок за отговор на NSURLSession? Моля, публикувайте резултата от модела на грешката и отговора. И моля, не изпълнявайте последователност, докато сесията тече. Той ще освободи контролера и ще го изключи   -  person Björn Ro    schedule 04.10.2015
comment
Не поставих точка на прекъсване в блока NSURLSession, но поставих точки на прекъсване в други области, но ги деактивирах.   -  person Anonymous    schedule 04.10.2015
comment
Не получих никакви грешки, както казах. Имам някои проблеми, но не и грешки, ако грешките са червената триъгълна икона с удивителен знак или точка.   -  person Anonymous    schedule 04.10.2015
comment
не, имаме предвид грешка в отговора :) моля, поставете точка на прекъсване. Или приложението не стартира?   -  person Björn Ro    schedule 04.10.2015
comment
какво е грешка в отговора? съжалявам, нов съм в swift.   -  person Anonymous    schedule 04.10.2015
comment
Ясно, разбрах. Когато стартирате приложението, направете точка на прекъсване в блока на сесията. Означава синята маркировка от лявата страна :) след това докоснете вашето влизане, така че действието да се задейства, трябва също да поставите точка на прекъсване в началото на функцията, за да сте сигурни, че действието се задейства. Ако не, задайте действието на бутона. Ако отговорът е да и сте стигнали до блока за отговор за вашето dataRequest, отпечатайте модела на грешката, който идва. Ако не сте пристигнали тук, нямам представа какво правите :). О, и коментирайте призива за segue за тестване   -  person Björn Ro    schedule 04.10.2015


Отговори (2)


След като изпълните задачата, изпълнявате последователност. това означава, че напускате контролера и контролерът вече няма да съществува. Няма силна препратка и затова вашият блок за отговор няма да бъде извикан.

Премахнете performSeque и опитайте отново.

person Björn Ro    schedule 04.10.2015
comment
хм, тогава поставете точка на прекъсване в блока за отговор и проверете 3-те параметъра в него. Параметърът за грешка би бил интересен. Просто направете в конзолата : po грешка - person Björn Ro; 04.10.2015

Не позволих на приложението ми да работи с HTTP. Промених своя info.plist, като добавих

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
person Anonymous    schedule 11.11.2015
comment
App Transport Security се изисква за всяко приложение, изпратено до App Store след 31 декември 2016 г. Отказът от App Transport Security вече не е възможен. Имайте предвид, че екипът за преглед на App Store изисква обяснение от вас, ако частично се откажете от App Transport Security чрез използване на изключение, като NSAllowsLocalNetworking или NSAllowsArbitraryLoadsInWebContent. Можете да прочетете повече за това в документацията на Apple. - person SHS; 19.01.2017