【问题标题】:Swift URL Handling快速 URL 处理
【发布时间】:2014-11-25 08:56:29
【问题描述】:

这是我的问题;我想从 URL 中获取一些数据,代码如下:

let internetURL = NSURL(string:"http://www.example.org")
let siteURL = NSURLRequest(URL: internetURL!)
let siteData = NSURLConnection(request: siteURL, delegate: nil, startImmediately: true)
let strSiteData = NSString(data: siteData, encoding: NSUTF8StringEncoding)

当我写这个时,XCode 给我以下错误:

调用中的额外参数“编码”

在最后一行。 我该怎么办?

【问题讨论】:

标签: ios swift nsurlconnection http-request


【解决方案1】:

你可以这样做

var data = NSMutableData()

func someMethod()
{        
    let internetURL = NSURL(string:"http://www.google.com")
    let siteURL = NSURLRequest(URL: internetURL)
    let siteData = NSURLConnection(request: siteURL, delegate: self, 
         startImmediately: true)    
}

func connection(connection: NSURLConnection!, didReceiveData _data: NSData!)
{ 
    self.data.appendData(_data)
}

func connectionDidFinishLoading(connection: NSURLConnection!)
{
    var responseStr = NSString(data:self.data, encoding:NSUTF8StringEncoding)
}

【讨论】:

  • 你能举个例子吗?
  • @massimilianos 这个例子在答案中!
  • @rckoenes 请举例说明如何使用您的代码:P
  • @massimilianos 我不明白,答案中的代码,您还需要什么。它向您展示了如何使用委托方法来填充NSData 对象,以及在连接完成加载时将其转换为字符串。
  • @rckoenes 我是初学者,我需要知道如何在我的控制器中使用此代码。
【解决方案2】:

错误信息很糟糕。

如果你在 Playground 中运行它,你可以看到 siteData 是一个 NSURLConnection 对象。不是 NSData 对象。这就是它无法编译的原因。

从 URL 创建字符串的正确方法是:

let internetURL = NSURL(string:"http://www.example.org")

var datastring = NSString(contentsOfURL: internetURL!, usedEncoding: nil, error: nil)

正确使用NSURLConnection 很复杂,因为它是一个低级API,只有在您做一些不寻常的事情时才应该使用它。正确使用它需要您了解 TCP/IP 堆栈并与之交互。

【讨论】:

  • 我不同意 NSURLConnection 复杂或不寻常(但这可能是我个人的看法)。它是一种在不阻塞主线程的情况下异步加载资源的方法。 (NSURLSession 是一个更现代的)。 – 你至少应该提到 NSString(contentsOfURL:...) 应该在后台队列上调用,这样它就不会阻塞主 UI 线程。
  • 好像没有收到任何数据:'(
猜你喜欢
  • 2014-02-19
  • 2019-04-08
  • 1970-01-01
  • 2018-03-04
  • 2021-03-19
  • 2011-03-22
  • 2011-01-08
  • 2013-11-24
相关资源
最近更新 更多