2015-11-25 4 views
1

Я создаю простое приложение «Резолюции», но при запуске текущего контроллера представления в MasterViewControllet у меня возникла проблема - я хочу сделать это, чтобы установить некоторые из его переменных. Ошибка, которую я получаю, - «Не удалось отличить значение типа« UINavigationController »(0x10c534670) до« Resolution_App.MasterViewController »(0x10ac97d00)». Это моя основная раскадровка: enter image description here и это код в разделе «Добавить новые разрешения» viewcontroller Пожалуйста, какие-либо предложения по правильному их использованию?Контроллер представления зрения в MasterViewController при использовании UINavigationController

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. 

} 


} 

ответ

2

Контроллер представления, который представляет ваш modal EditViewController, является UINavigationController, который содержит MasterViewController, а не MasterViewController. Вы должны создать протокол и делегат для передачи данных между EditViewController и MasterViewController. Вы можете найти дополнительную информацию о протоколах here.

Или сказать:

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

Спасибо за ваш ответ. Это сработало! :) var destinationController = (presentingViewController as! UINavigationController) .viewControllers [0] as! MasterViewController –

1

В раскадровке вам нужно выбрать Master VC, а затем на вкладке 3 инфо задать класс «MasterViewController».

+0

Спасибо за ваш комментарий. Однако я не уверен, что именно вы предлагаете. Не могли бы вы быть более конкретными, пожалуйста. –

+0

Если вы это сделали, у вас есть неправильный VC - nav VC. Получите ожидаемый VC от детей VC навигация. –