【问题标题】:Get data from HTTP Request - Swift从 HTTP 请求中获取数据 - Swift
【发布时间】:2014-06-19 14:25:17
【问题描述】:

今天我正在尝试从网页中获取一些数据。

它一直在说“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))
}

}

【问题讨论】:

  • EXC_BAD_ACCESS 会在哪一行崩溃?
  • 您返回的“文本”是什么?我看不到它的声明...
  • 忘记更改此问题的一些变量名称,已编辑..
  • 有什么理由将 NSString 与新的 String (Swift) 数据类型混合在一起?
  • 是的,你绝对是对的。我会改变一切

标签: macos swift xcode6


【解决方案1】:

我怀疑“url_textField.stringValue”在您传入时为零。使用固定字符串尝试它是可行的。但还要注意,该函数将在异步请求完成之前返回,因此您的代码将始终打印“无法加载”。如果您在完成处理程序中添加将输出分配给您的 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)")

它的输出是:

立即无法加载数据
异步完成

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2017-08-27
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2018-05-16
    相关资源
    最近更新 更多