gpt4 book ai didi

swift - 从主视图 Controller 到详细 View Controller 的转换

转载 作者:行者123 更新时间:2023-11-30 10:16:51 24 4
gpt4 key购买 nike

我收到“在展开可选值时意外发现 nil”,因为在下面的代码中我试图在初始化之前为 webview 分配值。我正在尝试从主视图 Controller 转换为详细 View Controller 。

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
let controller = (segue.destinationViewController as UINavigationController).topViewController as DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}

详细查看代码:

  var detailItem: AnyObject? {
didSet {
// Update the view.
self.configureView()
}
}

func configureView() {
// Update the user interface for the detail item.
if let detailContent = detailItem?.valueForKey("content") as? String{
self.webView.loadHTMLString(detailContent as String, baseURL:nil)
}
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.configureView()
}

它失败了,因为我的 Webview 为零。如何解决我的 socket 在设置时未初始化的情况。

请帮忙。谢谢。

最佳答案

停下来想想事情发生的顺序:

  • prepareForSegue - 目标 View Controller 存在,但仅此而已。没有景观,也没有设置门市。您可以设置其非 socket 属性,但这就是您所能做的。

  • 转场开始发生。

  • 目标 View Controller 获取viewDidLoad现在它有一个 View 并且其导出已设置。

  • segue 完成,目标 View Controller 获取 viewWillAppear: 以及稍后的 viewDidAppear:。现在它的 View 实际上在界面中。

很明显,您不能允许 configureView 假设 Web View 存在,因为第一次调用它时,即在 prepareForSegue 中,它存在。 configureView 需要显式测试 self.webView 是否为零,如果是,则不执行任何操作:

func configureView() {
// Update the user interface for the detail item.
if self.webView == nil { return } // no web view, bail out
if let detailContent = detailItem?.valueForKey("content") as? String{
self.webView.loadHTMLString(detailContent as String, baseURL:nil)
}
}

之后,一切都会好起来的。 viewDidLoad 随后将被调用,并且 configureView 将再次被调用 - 并且这次,都是 detailItem 并且 WebView 存在,所以一切都会好起来的。

关于swift - 从主视图 Controller 到详细 View Controller 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com