편집 : 관련 세부 정보를 추가하십시오.예기치 않게 nil이 발견되었지만 값을 인쇄 할 수 있습니다.
내 앱의 경우 날씨 정보가 다른 3 개의 페이지가 있어야합니다. 나는 그것들을보기 위해 수평으로 스크롤 할 수있다. 나는이 유튜브 비디오와 Github 프로젝트를 참고했다. 내가 무슨 짓을
는 https://github.com/ibrdrahim/slidePage
https://www.youtube.com/watch?v=1_daE3IL_1s 메인 스토리 보드에 스크롤 뷰를 추가 할 수 있습니다. 그런 다음 xib로 3 개의 Cocoa Touch 클래스를 만듭니다. 각각은 UIViewController의 하위 클래스입니다. 각 xib는 스크롤보기에서 페이지로 작동합니다.
이것은 설치 xib보기에 사용 된 코드입니다.
이
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
는 NowScreenView에 연결된 모든 출구이다.
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 앱을하고있는 중이 야. 날씨 앱입니다. 이유를 이해할 수없는 치명적인 오류가 발생했습니다. JSON 파일에서 가져온 위치 데이터를 화면의 cityLabel에 할당하고 싶습니다. 도시 이름을 보여줍니다. 지금은 JSON에서 위치 데이터의 값을 인쇄 할 수 있지만 라벨에 할당하려면 치명적인 오류가 발생합니다.
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를 업데이트하는 방법입니다.
내가cityLabel.text = "\(weatherDataModel.city)"
내가 print(weatherDataModel.city)
하려고이 라인에 치명적인 오류가 발생했습니다, 그것은 오류없이 도시 이름을 인쇄합니다. 하지만 cityLabel에 값을 할당 할 수 없었습니다. 누군가가 문제의 원인을 알아내는 데 도움을 줄 수 있습니까? 감사!
누군가가 전체 코드를보고 싶어하는 경우에 대비 한 GitHub 링크입니다. https://github.com/lucky13820/air
해당 줄에있는 하나의 변수에만 집중하지 마십시오. 이 줄에는 다른 변수가 있습니다. 'cityLabel'은 무효입니다. 콘센트를 연결하십시오. – rmaddy
@rmaddy IBOutlet으로 cityLabel을 연결했습니다. 나는 또한 viewDidLoad()에서 값을 제공한다. – lucky13820
디버거를 사용하십시오. 정말로 어떤 값이 '없음'인지 확인하십시오. – rmaddy