在我的模型中,我构建了一个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