2015-09-16 4 views
2

Я новичок в быстром кодировании, поэтому большая часть моего кода - это «так я нашел его в Интернете».Функции делегата не называются - NSURLConnection

Я пытаюсь отправить запрос HTTP GET, а затем работать с ним. Для этого я использую NSURLConnection. У меня 2 быстрых файлов в моем Xcode проекте (это стремительный проект консоли, а не площадка), один является основной и вторым содержит мой класс, я хотел бы использовать для делегирования:

import Foundation 

class Remote: NSObject, NSURLConnectionDelegate { 

    var data = NSMutableData() 

    func connect() { 
     var url = NSURL(string: "https://www.google.com") 
     var request = NSURLRequest(URL: url!) 

     NSLog("Is%@ main thread", NSThread.isMainThread() ? "" : " NOT"); 
     var conn = NSURLConnection(request: request, delegate: self, startImmediately: false) 
     conn?.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode) 
     conn?.start() 

     sleep(2) 
    } 


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

    func connection(connection: NSURLConnection!, didReceiveData conData: NSData!) { 
     println("didReceiveData") 
    } 

    func connectionDidFinishLoading(connection: NSURLConnection!) { 
     println("DidFinishLoading") 
    } 

    deinit { 
     println("deiniting") 
    } 

} 

Вот мое главное быстро код:

import Foundation 

var xxx = Remote() 
xxx.connect() 

sleep(10) 

sleep(2) 

Когда я установить точки останова на каждом println в функции делегата, они никогда не попали. Выполнение выполняется из основного потока в соответствии с результатом NSLog.

В отладчике я вижу, что данные отправляются и принимаются по сети, но я никогда не получаю никакого вывода. Я видел много подобных вопросов здесь, но мне ничего не помогло.

Что я делаю неправильно?

+0

Это программа командной строки? Затем вам нужно добавить runloop, см., Например, [CFRunLoop в программе Swift Command Line] (http://stackoverflow.com/questions/25126471/cfrunloop-in-swift-command-line-program). –

ответ

0

Как Martin R предложил, чтобы я добавил правильный NSRunLoop в свой код сразу после запуска NSURLConnection:

self.shouldKeepRunning = true 
let theRL = NSRunLoop.currentRunLoop() 

while self.shouldKeepRunning && theRL.runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeInterval: 1.0, sinceDate: NSDate())) { } 

shouldKeepRunning переменных Ий определяется в моем классе, и это значение ЛЖИ в функции делегата connectionDidFinishLoading, так

Смежные вопросы