【问题标题】:Cast view controller to MasterViewController when using UINavigationController使用 UINavigationController 时将视图控制器投射到 MasterViewController
【发布时间】:2016-02-27 16:05:18
【问题描述】:

我正在创建一个简单的“解决方案”应用程序,但在将当前视图控制器转换为 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.

}


}

【问题讨论】:

    标签: ios swift model-view-controller


    【解决方案1】:

    在情节提要中,您需要选择 Master VC,并在第三个信息选项卡上将类设置为“MasterViewController”。

    【讨论】:

    • 感谢您的评论。但是,我不确定您到底在暗示什么。请您说的更具体些。
    • 如果你这样做了,你的 VC 就是错误的——导航 VC。从 nav VC 的孩子那里获取预期的 VC。
    【解决方案2】:

    呈现模态 EditViewController 的视图控制器是 UINavigationController,它包含 MasterViewController 而不是 MasterViewController 本身。您应该创建一个协议和一个委托来在 EditViewController 和 MasterViewController 之间传递数据。您可以找到有关协议的更多信息here

    或者说:

    var destinationController = presentingViewController.viewControllers[0] as! MasterViewController
    

    【讨论】:

    • 感谢您的回答。那行得通! :) var destinationController = (presentingViewController as!UINavigationController).viewControllers[0] as! MasterViewController
    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多