2014-06-19 4 views
0

오늘 웹 페이지에서 데이터를 가져 오려고합니다.HTTP 요청에서 데이터 가져 오기 - Swift

"Exc Bad Access"라고 말하는 충돌이 계속됩니다.

class CodeViewController: NSObject { 

@IBOutlet var output_box : NSTextField 
@IBOutlet var url_textField : NSTextField 

var output : NSString = "Unable to load data" 

func downloadHTML (path: String) -> String { 
    var url = NSURL(string: "\(path)") 
    var request = NSURLRequest(URL: url) 
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in 
     self.output = NSString(data: data, encoding: NSUTF8StringEncoding) 
     //EXC_BAD_ACCESS when trying to set self.output new value 
    } 
    return output 
} 

@IBAction func retrive(sender: AnyObject!) { 
    println(downloadHTML(url_textField.stringValue)) 
} 

} 
+0

어느 선 수행은 CRAS EXC_BAD_ACCESS와 함께 h? – Undo

+0

돌아 오는 "텍스트"는 무엇입니까? 그 선언을 볼 수 없습니다 ... – Grimxn

+0

이 질문에 대한 일부 var 이름을 변경하는 것을 잊었습니다 .. –

답변

0

나는 "url_textField.stringValue는"당신이 그것을 통과 지점에서 전무이라고 생각한다. 고정 된 문자열 작품을 시도. 그러나 비동기 요청이 완료되기 전에 함수가 반환되므로 코드에서 항상 "Unable to load"를 인쇄합니다. 완성 처리기의 output_box에 출력을 할당하는 줄을 추가하면 요청이 완료되면 텍스트 상자 업데이트가 표시됩니다.

작동하는 코드는 ...

class CodeViewController: NSObject { 

    var output : NSString = "Unable to load data" 

    func downloadHTML (path: String) -> String { 
     var url = NSURL(string: "\(path)") 
     var request = NSURLRequest(URL: url) 

     let completionBlock: (NSURLResponse!, NSData!, NSError!) -> Void = {response, data, error in 
      self.output = NSString(data: data, encoding: NSUTF8StringEncoding) 
      println("Asynch completed \(self.output)") 
     } 

     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: completionBlock) 

     return output 
    } 

} 

var c: CodeViewController? = nil 
c = CodeViewController() 
c!.downloadHTML("http://www.google.com") 
println("Immediate \(c!.output)") 

그 출력은 다음과 같습니다!

...
비동기가 < 완료 데이터의 DOCTYPE HTML > < HTML을로드 할 수 없습니다 즉시

관련 문제