【发布时间】:2020-11-03 19:56:31
【问题描述】:
我正在使用一些值来执行一些计算。出于测试目的,我在 Label1 中将值显示为字符串,因为它存储为字符串,而在 Label2 中,我将转换后的值显示为 Double,因为最后我需要将它们作为双精度值进行计算。
奇怪的是,当我第一次访问 ViewController 时,它没有显示任何值。但是,如果我返回并使用导航控制器再次单击它,它实际上可以工作。但是我需要这些值,因为我的初衷正如我所说,不显示一些标签,而是用它进行一些计算。
我制作了一个小 gif 来向您展示问题所在,但我在添加照片时遇到了问题。基本上发生的事情是,我单击带有标签的 ViewController 并且没有显示任何内容。我返回并再次按,值将显示在标签中。
为什么会这样以及如何立即显示/立即用于计算
感谢您的帮助。 :)
class AHPfinalPreferencesViewController: UIViewController {
var ahpPrios = [AHPPriorityStruct]()
let decoder = JSONDecoder()
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
let ajkpXc = globaLajkpXc
let ajkpXijr = globaLajkpXijr
let valueA = globaLajkpXc
let valueB = Double(globaLajkpXijr)
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserService.ahpPref(for: User.current) { (ahpPrios) in
self.ahpPrios = ahpPrios
print("This is our AHP PRIOS", ahpPrios)
for ahpPrio in ahpPrios {
print(ahpPrio)
}
print("this is the global ajk. ", self.ajkpXc)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Mark: - Get Data
label1.text = valueA
label2.text = "\(String(describing: valueB))"
// MARK: - Set Values for calculation
// setValues()
// ahpCalculation()
}
}
可能是因为 globalVariables 吗?我知道这不是正确的做法,但就我的目的而言,它绝对“没问题”
import Foundation
import FirebaseAuth.FIRUser
import FirebaseDatabase
import FirebaseUI
import FirebaseAuth
import CodableFirebase
var globaLajkpXc: String = String()
var globaLajkpXijr: String = String()
var globaLajkpXqpa: String = String()
struct UserService {
static func ahpPref(for user: User, completion: @escaping ([AHPPriorityStruct]) -> Void) {
let ref = Database.database().reference().child("AHPRatings").child(user.uid)
ref.observe(DataEventType.value, with: { snapshot in
guard let value = snapshot.value else { return }
do {
let ahpPrios = try FirebaseDecoder().decode(AHPPriorityStruct.self, from: value)
print(ahpPrios)
// MARK: - lets store the values in the actual constants :)
let ajkpXc = ahpPrios.ajkpXc
let ajkpXijr = ahpPrios.ajkpXijr
let ajkpXqpa = ahpPrios.ajkpXqpa
globaLajkpXc = ajkpXc ?? "no Value"
globaLajkpXijr = ajkpXijr ?? "no Value"
globaLajkpXqpa = ajkpXqpa ?? "no Value"
} catch let error {
print(error)
}
})
}
}
[1]: https://i.stack.imgur.com/VKxaE.png
【问题讨论】:
-
我试图完全按照您所说的去做。 ```` override func viewDidLoad() { super.viewDidLoad() UserService.ahpPref(for: User.current) { (ahpPrios) in self.ahpPrios = ahpPrios print("This is our AHP PRIOS", ahpPrios) } self. label1.text = self.valueA self.label2.text =“(字符串(描述:self.valueB))”}````
标签: ios swift uinavigationcontroller viewcontroller viewwillappear