我有一个Data Manager类来处理一些JSON活动。当一个动作完成时,我想推送到导航控制器。
FirstViewController调用DataManager类的函数
DataManager类
class func extract_json(data:NSData) -> Bool {
//Success
FirstViewController().pushToValueView()
}
FirstViewController类
func pushToValueView() {
println("Push to Value View")
navigationController?.pushViewController(ValueViewController(), animated: true)
}
在此示例中,调用了println()
但没有发生推送。如果我在FirstViewController中调用pushToValueView()
,例如self.pushToValueView()
(出于调试目的),确实会发生推送。
答案 0 :(得分:0)
尝试在FirstViewController的现有实例上调用此函数。 我认为在这个例子中你试图将视图控制器推送到退出方法范围后取消分配的FirstViewController。这就是视图控制器不会出现的原因
答案 1 :(得分:0)
打开可选项。编辑:你不应该从模型类btw调用你的vc,这是糟糕的MVC,我会使用观察者而是在关闭完成时得到通知
if let nav = self.navigationController {
println("Push to Value View")
nav.pushViewController(ValueViewController(), animated: true)
}
答案 2 :(得分:0)
您可以修改extract_json
函数,使其接受在提取数据后执行的闭包。闭包将包含推送新视图控制器的代码,它将在调用而不是被调用对象的上下文中执行:
在DataManager.swift中 -
func extractJSON(data:NSData, completion:() -> Void) {
//Do whatever
completion()
}
在FirstViewController.swift中 -
func getDataAndSegue() {
extractJSON(someData, completion:{
navigationController?.pushViewController(ValueViewController(), animated: true)
}
)
}