我有什么
我有一个带有 UITableView 的 View Controller (SelectNameViewController),上面有一个名称列表。当用户点击一个名字时,它会转到一个 ViewController (ResultController),它有一个容器 View ,可以加载 3 个 ViewControllers (vc1,vc2, vc3) 允许用户滚动浏览。
在 ResultController 上,我有一个连接到 JSON 文件并根据所选名称下载信息的 alamofire 请求:
Alamofire.request(.GET, sendyURLSet, parameters: ["name": passedName, "api_key": api_key])
.responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
self.age = json["age"].stringValue
self.userInfo.setValue(self.age, forKey: "age")
}
case .Failure(let error):
print(error)
}
}
在 VC1 我的 viewDidAppear
中有这个if let a = userInfo.stringForKey("age") {
print("Age: \(a)")
} else {
print("nope")
}
问题
从 Alamofire 请求加载内容后,我无法在 PageViewController subview 上加载数据。
当用户单击名称并转到 ResultController 时,3 个 View 将加载到容器 View 中。第一个出现的屏幕是 vc1。
但是,在控制台中我得到:
Nope
如果我滑动到 vc2 然后返回到 vc1 我得到:
Age 32
在控制台中。
问题
谁能告诉我为什么该值没有出现在 ViewController (vc1) 的第一次显示中并告诉我如何解决它?
我快疯了
最佳答案
看起来 vc1 的加载速度快于数据获取完成的速度。
要么等待数据加载完成再加载新 Controller ,要么数据加载完成后直接设置标签
关于ios - Swift:NSUserDefaults 没有立即设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702636/