在我的模型中,我構建了一個API類,它爲基本API調用創建函數http://openweathermap.org/api,該函數以JSON輸出作爲字典返回閉包。跨ViewControllers設置和訪問全局屬性的正確方法是什麼?
然後我在我的第一個ViewController中調用這個函數,當我運行println()時,它成功地將輸出作爲字符串返回。
我遇到的問題是如何將此輸出(所有基本字符串類型)存儲爲全局可訪問的變量,然後我可以通過Segue傳遞給自定義的SearchResultViewController視圖。
我目前不工作的方法試圖在我的FirstViewController開始處設置一個空字符串,可選地將輸出打包爲一個字符串,存儲在cityName變量中,然後作爲Segue的一部分通過覆蓋來傳遞prepareForSegue函數。
然後我會在我的SearchResultViewController中創建相應的屬性cityName。
我已經徹底檢查了命名約定/鏈接到自定義ViewController類,並且想確認是否缺少這種方法中的關鍵步驟。
下面詳細代碼。
FirstViewController:
var cityName = ""
@IBAction func searchButton() {
let api = API()
api.weatherSearch(urlSearch: searchField.text!) { dictionary in
println(dictionary)
if var cityName = dictionary["name"] as? String {
println(cityName)
}
}
self.performSegueWithIdentifier("Search", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if(segue.identifier == "Search") {
var SearchResult = segue!.destinationViewController as SearchResultViewController;
SearchResult.cityName = cityName
}
}
SearchResultViewController:
class SearchResultViewController: UIViewController {
var cityName: String!
@IBOutlet weak var Picture: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
println(cityName)
}
}
感謝您的建議,概念上它是有道理的 - 不幸的是,當我跑這個時,我得到了以下新錯誤 - 「由於未捕獲的異常'NSInternalInconsistencyException'終止應用程序」。我認爲這發生在SearchResultViewController中的println(cityName)時。 另外,讚賞它是一個廣泛的問題,在這種情況下處理異步性的最佳實踐是什麼?你能指出一些好的資源嗎? – AlexHandy1