gpt4 book ai didi

ios - 尝试将数据传递到另一个 View Controller 时出现 fatal error

转载 作者:行者123 更新时间:2023-12-01 18:35:50 25 4
gpt4 key购买 nike

为了练习我的网络,我构建了一个带有文本字段的应用程序,您可以在其中输入一些内容。我使用维基百科 API 来获取该术语/名称/表达式的定义。我的目标是将该定义显示到另一个 View Controller 中。

一个按钮执行到新 View Controller 的 segue,其中一个标签显示该定义。

获取请求有效,但是当点击按钮时,我得到一个 fatalError :“ fatal error :在隐式展开可选值时意外发现 nil”。

我想补充一点,错误显示在“准备转场”功能中。

这是我的第一个 View Controller 的代码

import UIKit
import Alamofire
import SwiftyJSON

class ViewController: UIViewController {

@IBOutlet weak var textEntryLabel: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//MARK: - Relevant variables
let wikipediaURl = "https://en.wikipedia.org/w/api.php"
var termDefinitionInfo: String = ""
let segueName: String = "toDefinition"

@IBAction func buttonToDefinition(_ sender: UIButton) {
// on fait la requete ici
httpCall(termDefinition: textEntryLabel.text ?? "nothing to pass")

performSegue(withIdentifier: segueName , sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == segueName {
let secondVC = segue.destination as! DefinitionViewController

secondVC.definitionLabel.text = termDefinitionInfo

}
}

//MARK: - NETWORKING

func httpCall(termDefinition: String) {
let parameters : [String:String] = [
"format" : "json",
"action" : "query",
"prop" : "extracts",
"exintro" : "",
"explaintext" : "",
"titles" : termDefinition,
"indexpageids" : "",
"redirects" : "1",
]

//
request(wikipediaURl, method: .get, parameters: parameters).responseJSON { (response) in
if response.result.isSuccess {
//1. on affiche le tableau json initial
let definitionJSON: JSON = JSON(response.result.value)
print(definitionJSON)

// deux valeurs : pageID et definition
let pageId = definitionJSON["query"]["pageids"][0].stringValue
let pageDefinition = definitionJSON["query"]["pages"][pageId]["extract"].stringValue
self.termDefinitionInfo = pageDefinition
print(self.termDefinitionInfo)

} else {
print("Error! Could not fetch data!")
}
}
}


}


这是第二个 View Controller 的代码
import SwiftyJSON
import Alamofire

class DefinitionViewController: UIViewController {

@IBOutlet weak var definitionLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}


}```

最佳答案

提示:尽量避免强制向下转换

在您的情况下,您尝试在 IBOutlet 未连接到其父 View Controller 时为其分配一个值。你最好这样做:

class DefinitionViewController: UIViewController {
@IBOutlet weak var definitionLabel: UILabel!
var labelValue: String?

override func viewDidLoad() {
super.viewDidLoad()

definitionLabel.text = labelValue
}
}

在您的第一个 View 中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == segueName {
if let secondVC = segue.destination as? DefinitionViewController {
secondVC.labelValue = termDefinitionInfo
}
}
}

关于ios - 尝试将数据传递到另一个 View Controller 时出现 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59436600/

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