【问题标题】:How To initialise a string using contentsOfURL and update a UILabel's text in Swift如何使用 contentsOfURL 初始化字符串并在 Swift 中更新 UILabel 的文本
【发布时间】:2015-02-10 13:01:13
【问题描述】:

我正在尝试从网页读取数据,并且我正在使用 NSString 初始化程序 - init(contentsOfURL,因为该页面上只有一个句子需要在标签中显示。

if var optUrl = NSURL(string: "www.example.com/examplepage.php"){
        if let optStr = NSString(contentsOfURL: optUrl, encoding: NSUTF8StringEncoding, error: nil){
            println(optStr)
            songLabel.text = optStr
        }

    }

当我在 Xcode 的模拟器中运行代码时,println 会打印句子,但它不会显示在标签中...如果我将代码更改为 songLabel.text = "Now playing: \(optStr)",我会看到 Now playing:但不是 println 显示的 optStr 的值。

是不是我做错了什么?

【问题讨论】:

  • 尝试将 http:// 添加到 optUrl stackoverflow.com/questions/10106087/…
  • 据说依靠 NSString 为您下载内容不是最佳做法,更好的方法是使用 NSURLSession 下载文件并从那里解析它们
  • 改了,但不影响结果:(

标签: ios iphone swift xcode6 uilabel


【解决方案1】:

结论

结果一切正常,字符串前面有一个换行符,由于标签行数为 0,文本不可见。断点永远是你的朋友。


无关

看来你需要添加http://

这对我来说是一个 php 文件的游乐场

if var optUrl = NSURL(string: "http://php.net/manual/en/function.file.php") {
    println(optUrl)
    var error: NSError? = nil
    if let optStr = NSString(contentsOfURL: optUrl, encoding: NSUTF8StringEncoding, error: &error) {
        println(optStr)
    }
    print(error)
}

编辑

您的字符串也可能是空的,因为您说设置“正在播放:(optStr)”会导致“正在播放:”

在游乐场验证您的内容,但您至少应该能够检查

countElements(optStr) > 0

【讨论】:

  • println 确实有效,但我必须将optStr 放入标签中,这不起作用
  • @m1ch14l 好吧,您可以随时在行上放置断点并确认,或者您可以将设置文本放入 NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in //set text这里}
  • @m1ch14l 我更新了我的答案,可能你的 php 实际上是空的
  • 搞定了,我在songLabel.text = optStr 放置了一个断点,并注意到optStr 在字符串的开头包含\n。我将标签的行更改为 2,现在我可以看到字符串了...我感到愚蠢和愚蠢:p 感谢您的帮助;)
  • @m1ch14l 哈哈太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多