【发布时间】:2018-04-05 15:25:54
【问题描述】:
我正在尝试从 navigationController 中弹出 ViewController 并使用 segue 以编程方式发送数据。我似乎无法成功地将数据传输到我的目标 viewController。下面是我的代码。请问有人可以告诉我哪里出错了吗?
我正在尝试将目标 viewController 中的变量“segueContainerNewFolderCreatedBool”分配为“true”。但是当目标视图控制器加载时,在 viewWillAppear() 中,“segueContainerNewFolderCreatedBool”的值始终为“假”。我没有想法。
目标视图控制器:
class menuTableViewController: UITableViewController{
...
var segueContainerNewFolderCreatedBool = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
print("self.segueContainerNewFolderCreatedBool : \(self.segueContainerNewFolderCreatedBool)")
} ...
}
源视图控制器:
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
if let jsonData = data{
do{
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
guard
let jsonDictionary = jsonObject as? [String:String],
let message = jsonDictionary["msg"] else{
print("unexpected data structure from server")
return
}
if(message == "folder created success"){
// Folder created success
print("folder created success")
// Generate segue to tansfer data - let 'menuTableViewController' know that new
// folder has been created - to update tableView of user folders
let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let destinationViewController = storyBoard.instantiateViewController(withIdentifier: "landingPage") as! menuTableViewController
let sourceViewController = storyBoard.instantiateViewController(withIdentifier: "createUserFolder") as! CreateNewUserFolderPubMed
let segue = UIStoryboardSegue.init(identifier: "nFolderSegue", source: sourceViewController, destination: destinationViewController, performHandler: {
DispatchQueue.main.async{
destinationViewController.segueContainerNewFolderCreatedBool = true
if let navController = self.navigationController{
navController.popViewController(animated: true)
}
}// End DispatchQueue
})
segue.perform()
}else{
// Folder created fail
}
}catch let error{
print("error detail: \(error)")
}
}else if let requestError = error{
print("print error: \(requestError)")
}else{
print("unexpected error")
}
})
task.resume()
【问题讨论】:
-
为什么要使用
popViewController导航到新的视图控制器?在我看来,您无法设置该布尔值,因为您实际上从未将目标视图控制器添加到视图堆栈中。 -
另外,请不要以小写字母开头你的类名。使用大写。