Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用UINavigationController时将视图控制器强制转换为MasterViewController_Ios_Swift_Model View Controller - Fatal编程技术网

Ios 使用UINavigationController时将视图控制器强制转换为MasterViewController

Ios 使用UINavigationController时将视图控制器强制转换为MasterViewController,ios,swift,model-view-controller,Ios,Swift,Model View Controller,我正在创建一个简单的“分辨率”应用程序,但在将当前视图控制器转换为MasterViewControllet时,我遇到了一个问题—我想这样做是为了设置它的一些变量。 我收到的错误是“无法将类型为“UINavigationController”(0x10c534670)的值强制转换为“Resolution_App.MasterViewController”(0x10ac97d00) 这是我的主要情节提要: 这是我的“添加新分辨率”视图控制器中的代码 请问,有没有关于如何正确投法的建议 class E

我正在创建一个简单的“分辨率”应用程序,但在将当前视图控制器转换为MasterViewControllet时,我遇到了一个问题—我想这样做是为了设置它的一些变量。 我收到的错误是“无法将类型为“UINavigationController”(0x10c534670)的值强制转换为“Resolution_App.MasterViewController”(0x10ac97d00) 这是我的主要情节提要: 这是我的“添加新分辨率”视图控制器中的代码 请问,有没有关于如何正确投法的建议

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]显示为!主视图控制器