【问题标题】:Passing data between ViewControllers using prepareForSegue not working使用 prepareForSegue 在 ViewController 之间传递数据不起作用
【发布时间】:2016-04-27 14:01:26
【问题描述】:

所以我基本上是在构建一个小型浏览器。在一个 VC 上,您将链接放入 textField 并使用一个按钮来连接到找到 webView 的另一个 VC。

import Foundation
import UIKit

class ViewOne:UIViewController {
    @IBOutlet weak var textField: UITextField!
    @IBAction func clear(sender: AnyObject) {
    textField.text = ""
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "go" {
            let controller:ViewTwo = segue.destinationViewController as! ViewTwo
            controller.textField = self.textField.text! as String
        }
    }
}


import Foundation
import UIKit

class ViewTwo:UIViewController {
@IBOutlet weak var webView: UIWebView!

override func viewDidAppear(animated: Bool) {

    let url = NSURL(string: textField!)
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data, response, error) in
        if let urlContent = data {
            let webContent = NSString(data: urlContent, encoding: NSUTF8StringEncoding)
            dispatch_async(dispatch_get_main_queue(), { 
                self.webView.loadHTMLString(String(webContent!), baseURL: nil)
            })
        }
    }

    task.resume()

    if textField?.isEmpty == true {
        print("nothing received")
    } else {
        print("\(textField)")
    }

}

var textField:String?
}

似乎数据不会通过。我收到一个致命错误,说 NSURLSession 在展开“url”时什么也没找到。

【问题讨论】:

  • 邮政编码作为代码,而不是图像
  • 您是否检查过代码中的 segue 标识符是否与 Storyboard 中的标识符匹配?
  • 1.) 您实际上是在 segueing 之前在应用程序中设置 textField 的文本,还是只是将其留空? 2.) 尝试将您的 textField.isEmpty 条件移动到 viewDidLoad() 函数,并在那里处理潜在的 nil 值。 3.) 应@Wain 的要求,请发布实际代码而不是图片。
  • @ZGski 但我认为 viewDidLoad 函数在一开始只能工作一次?这就是我使用 viewDidAppear 的原因。我很抱歉。我已经改成代码了。我当然是在输入网址!
  • 你是正确的,viewDidLoad() 只会在 ViewController 被实例化时被调用,所以你可以在viewDidAppear() 中保留条件。但是,在使用它之前检查和处理 nil 传递值通常是个好主意。

标签: ios swift uitextfield nsurl


【解决方案1】:

不要使用NSURL(string: "\(XXX)"),因为字符串的描述将包括它是可选的。相反,只需使用字符串NSURL(string: textField!)

【讨论】:

  • 谢谢,现在它可以工作了,但由于某种原因它不适用于google.com,但youtube.com 可以工作。 info.plist 文件中已启用任意加载...
  • 您需要调试 URL、会话响应、数据中的字符串、Web 视图错误...
  • 对不起,这到底是什么意思?这个错误以前从未发生在我身上。为什么 youtube 可以工作,而 google 不行?
  • 我没有足够的信息来猜测,你需要在运行它时检查发生了什么,这些信息将提供理解(或至少是猜测的能力)
  • 什么给了你零?任何带有Optional 的东西都意味着它是对某事的描述......
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2012-12-23
相关资源
最近更新 更多