gpt4 book ai didi

ios - 意外发现 nil 但我可以打印该值

转载 作者:行者123 更新时间:2023-11-30 11:56:03 25 4
gpt4 key购买 nike

编辑:添加一些更相关的详细信息。

因此,对于我的应用程序,我想要三个页面来显示不同的天气信息。我可以水平滚动来查看它们。我关注了这个 youtube 视频和 Github 项目以供引用。

https://www.youtube.com/watch?v=1_daE3IL_1s https://github.com/ibrdrahim/slidePage

我所做的是在主 Storyboard中添加 ScrollView 。然后我用 xib 创建了三个 Cocoa Touch 类。它们每个都是 UIViewController 的子类。每个 xib 将充当 ScrollView 中的一个页面。

这是我用于设置 xib View 的代码。

let xOrigin = self.view.frame.width

let credit : CreditScreenView = CreditScreenView(nibName: "CreditScreenView", bundle: nil)

mainScroll.addSubview(credit.view)

let forcast : ForcastScreenView = ForcastScreenView(nibName: "ForcastScreenView", bundle: nil)

mainScroll.addSubview(forcast.view)

let now : NowScreenView = NowScreenView(nibName: "NowScreenView", bundle: nil)

mainScroll.addSubview(now.view)

// set up the size for each view
credit.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)

forcast.view.frame = CGRect(x: xOrigin, y: 0, width: self.view.frame.width, height: self.view.frame.height)

now.view.frame = CGRect(x: xOrigin * 2, y: 0, width: self.view.frame.width, height: self.view.frame.height)

mainScroll.contentSize = CGSize(width: CGFloat(view.frame.width * 3), height: CGFloat(view.frame.height))
mainScroll.contentOffset.x = view.frame.width * 3

enter image description here

这是 NowScreenView 上所有连接的 socket 。

updateWeatherData 在应用程序获取 JSON 后调用。

func  getWeatherData(url: String, parameters: [String : String]) {

Alamofire.request(url, method: .get, parameters: parameters).responseJSON {
response in
if response.result.isSuccess {
print("Success! Got the weather data")

let weatherJSON : JSON = JSON(response.result.value!)

print(weatherJSON)

self.updateWeatherData(json: weatherJSON)
}
else {
print("Error \(String(describing: response.result.error))")
self.cityLabel.text = "链\n接\n不\n可\n用"
}
}
}
<小时/>

我现在正在开发我的第一个 iOS 应用程序。这是一个天气应用程序。我遇到了 fatal error ,我不明白为什么。我想要做的是将我从 JSON 文件获取的位置数据分配给屏幕上的 cityLabel。所以它显示了城市名称。现在我可以打印 JSON 中的位置数据值,但如果我想将其分配给标签,则会出现 fatal error 。

func updateWeatherData(json : JSON) {
let data = json["HeWeather6"][0]
let status = data["status"].stringValue
//print(json)
if status == "ok" {
let tmpsNow = data["now"]["tmp"].intValue

weatherDataModel.temperature = tmpsNow
weatherDataModel.city = data["basic"]["location"].stringValue
weatherDataModel.condition = data["now"]["cond_code"].intValue
weatherDataModel.weatherIconName = weatherDataModel.updateWeatherIcon(condition: weatherDataModel.condition)

updateUIWithWeatherData()
} else {
cityLabel.text = "天\n气\n不\n可\n用"
}
}

这就是我从 JSON 获取数据的方式。还有另一个weatherDataModel.swift来对JSON数据进行排序。

func updateUIWithWeatherData() {
cityLabel.text = "\(weatherDataModel.city)"
nowTemp.text = "\(weatherDataModel.temperature)º"
weatherIcon.image = UIImage(named: weatherDataModel.weatherIconName)!
}

这就是我在获得天气数据后更新 UI 的方式。

我在这一行遇到了 fatal error

cityLabel.text = "\(weatherDataModel.city)"

enter image description here

我尝试print(weatherDataModel.city),它将打印城市名称,没有错误。但我无法将值分配给 cityLabel。有人可以帮我找出问题所在吗?谢谢!

这是 GitHub 链接,以防有人想查看完整代码。 https://github.com/lucky13820/air

最佳答案

我刚刚编译了你的代码,问题不在于你的模型,问题在于你的 ViewController.swift 类,首先你要像这样用 nib 文件创建 View 。

NowScreenView(nibName: "NowScreenView", bundle: nil)

您在这一点上犯的错误是,像这样创建类级别变量。这是完全错误的。

let nowWeather = NowScreenView()

NowScreenView 不是共享类,它的简单 View 类通过执行此操作,您无法获取 NowScreenView 的引用,这就是为什么您得到 nil 标签,这是获取 NowScreenView 引用的真正方法

nowWeather  = NowScreenView(nibName: "NowScreenView", bundle: nil)

现在 nowWeather 已经引用了您的 View ,您可以访问您的 View 数据成员。

关于ios - 意外发现 nil 但我可以打印该值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804032/

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