Как я могу узнать, когда были получены данные с NSURLConnection?

Я работаю над приложением Swift, которое использует веб-сервис PHP для запроса базы данных. Одна проблема — я понятия не имею, как определить, когда были получены данные в классе модели, поэтому я не могу обновить представление! Как я могу узнать, завершилось ли соединение, а затем обновить указанный вид? Для этой цели я создал пустую метку с именем text. Заранее спасибо за помощь, и счастливых праздников!

User.swift

import Foundation

class User: NSObject {

var firstName: String?
var lastName: String?
var username: String
var password: String
var email: String?

var recievedJSON: NSMutableData = NSMutableData()
var userData: [[String: String]]!

var verified: Bool = false

required init(username: String, password: String) {
self.username = username
self.password = password
}

init(firstName: String, lastName: String, username: String, password: String, email: String) {
self.firstName = firstName
self.lastName = lastName
self.username = username
self.password = password
self.email = email
}

func attemptRegister() {
var variables: [String] = ["firstname=" + self.firstName! + "&"]
variables.append("lastname=" + self.lastName! + "&")
variables.append("username=" + self.username + "&")
variables.append("password=" + self.password + "&")
variables.append("email=" + self.email!)
request("https://codekaufman.com/register.php", variables: variables)
}

func attemptSignIn() {
var variables: [String] = ["username=" + self.username + "&"]
variables.append("password=" + self.password)
request("https://codekaufman.com/login.php", variables: variables)
println("Attempting sign-in...")
}

private func request(urlPath: String, variables: [String]?) {
var url: NSURL = NSURL(string: urlPath)!
var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)

if(variables != nil) {
request.HTTPMethod = "POST"
var bodyData: NSString = ""for item in variables! {
bodyData = bodyData + NSString(string: item)
}

request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
}

var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
println("Connection started.")
}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
self.recievedJSON.appendData(data)
println("Possible data recieved.")
}

func connectionDidFinishLoading(connection: NSURLConnection!) {
userData = parseJSON(recievedJSON)

if(userData != nil) {
println("Data recieved:")
println(userData[0])
self.firstName = userData[0]["first_name"]
self.lastName = userData[0]["last_name"]
} else {
println("No data recieved.")
}

}

func parseJSON(inputData: NSData) -> [[String: String]]? {
var error: NSError?
var userData: [[String: String]]!
userData = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as? [[String: String]]

#if DEBUG

if (userData != nil) {
println("NSData had data, printing and returning.")
println(userData)
} else {
println("NSData empty, returning nil.")
}

#endif

return userData
}

}

ViewController.swift

import UIKit

class ViewController: UIViewController {

@IBAction func prepareForUnwind(seque: UIStoryboardSegue) {

}

@IBOutlet weak var username: UITextField!
@IBOutlet weak var password: UITextField!
@IBOutlet weak var text: UILabel!

@IBAction func signin(sender: AnyObject) {
if(username.text == "" || password.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)
} else {
var attempt: User = User(username: username.text, password: password.text)
attempt.attemptSignIn()
}

}

override func viewDidLoad() {
super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}

}

Изменить: Основываясь на предыдущих комментариях / ответах, я чувствую, что должен уточнить. Данные принимаются. Но это занимает несколько секунд, так как я могу показать контроллеру представления, что данные получены и процесс завершен?

-1

Решение

Вы можете добавить уведомление в контроллер представления с помощью:

func addObserverForName(_ name: String?, object obj: AnyObject?, queue queue: NSOperationQueue?, usingBlock block: (NSNotification!) -> Void) -> NSObjectProtocol

Обязательно удалите его в deinit:

func removeObserver(_ notificationObserver: AnyObject)

Отправьте уведомление от connectionDidFinishLoading с помощью:

func postNotificationName(_ notificationName: String, object notificationSender: AnyObject?, userInfo userInfo: [NSObject : AnyObject]?)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]