Ios 使用UINavigationController时将视图控制器强制转换为MasterViewController
我正在创建一个简单的“分辨率”应用程序,但在将当前视图控制器转换为MasterViewControllet时,我遇到了一个问题—我想这样做是为了设置它的一些变量。 我收到的错误是“无法将类型为“UINavigationController”(0x10c534670)的值强制转换为“Resolution_App.MasterViewController”(0x10ac97d00) 这是我的主要情节提要: 这是我的“添加新分辨率”视图控制器中的代码 请问,有没有关于如何正确投法的建议Ios 使用UINavigationController时将视图控制器强制转换为MasterViewController,ios,swift,model-view-controller,Ios,Swift,Model View Controller,我正在创建一个简单的“分辨率”应用程序,但在将当前视图控制器转换为MasterViewControllet时,我遇到了一个问题—我想这样做是为了设置它的一些变量。 我收到的错误是“无法将类型为“UINavigationController”(0x10c534670)的值强制转换为“Resolution_App.MasterViewController”(0x10ac97d00) 这是我的主要情节提要: 这是我的“添加新分辨率”视图控制器中的代码 请问,有没有关于如何正确投法的建议 class E
class EditViewController: UIViewController {
@IBOutlet weak var resolutionTitle: UITextField!
@IBOutlet weak var achievedDate: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func saveButton(sender: AnyObject) {
var newResolution = ["name":resolutionTitle.text,"achievingDate":achievedDate.text,"startingDate":"\(NSDate())"] as Dictionary<String,String>
var destinationController = presentingViewController as! MasterViewController
destinationController.objects.insert(newResolution, atIndex: 0)
destinationController.notifyTableViewForNewInsertion()
destinationController.saveDateToFile()
self.dismissViewControllerAnimated(true, completion: {})
}
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
}
类EditViewController:UIViewController{
@IBOutlet弱var解析标题:UITextField!
@IBOutlet弱var实现日期:UITextField!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
@iAction func saveButton(发件人:AnyObject){
var newResolution=[“name”:resolutionTitle.text,“AchibitionDate”:AchibizedDate.text,“startingDate”:“\(NSDate())”]作为字典
var destinationController=将ViewController显示为!MasterViewController
destinationController.objects.insert(新分辨率,索引:0)
destinationController.notifyTableViewForNewInsertion()
destinationController.saveDateToFile()文件
self.dismissViewControllerAnimated(true,完成:{})
}
//标记:-导航
//在基于故事板的应用程序中,您通常需要在导航之前做一些准备
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
//使用segue.destinationViewController获取新的视图控制器。
//将选定对象传递给新的视图控制器。
}
}
在情节提要中,您需要选择主VC,并在第三个“信息”选项卡上将类设置为“MasterViewController”。显示模态EditViewController的视图控制器是包含MasterViewController而非MasterViewController本身的UINavigationController。您应该创建协议和委托,以便在EditViewController和MasterViewController之间传递数据。您可以找到有关协议的更多信息
或者说:
var destinationController = presentingViewController.viewControllers[0] as! MasterViewController
谢谢你的评论。然而,我不知道你到底在暗示什么。你能说得更具体点吗?如果你那样做了,你的VC就错了——导航VC。从nav VC的孩子那里得到期望的VC。谢谢你的回答。成功了!:)var destinationController=(将ViewController显示为!UINavigationController)。将ViewController[0]显示为!主视图控制器