2017-01-05 6 views
1

Я следовал учебнику YouTube о том, как создать список дел с CoreData, и мое приложение может создавать и запускать, однако вместо того, чтобы использовать другой контроллер представления для создания задачи, я создал контроллер модального представления, который будет отображаться через обычный контроллер вида. Проблема заключается в том, что сохраняет его в CoreData но отображает только когда приложение будет сброшен, все это код, используемый для регулярного контроллера представления, где должен появиться задачи:Reload View from Modal View Controller с CoreData в Xcode

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableViewTest: UITableView! 

var tasks : [Task] = [] 


override func viewDidLoad() { 
    super.viewDidLoad() 

    tableViewTest.dataSource = self 
    tableViewTest.delegate = self 
    self.navigationController?.isNavigationBarHidden = true 

} 

override func viewWillAppear(_ animated: Bool) { 
    getData() 

    tableViewTest.reloadData() 
} 

func tableView(_ tableViewTest: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return tasks.count 
} 

func tableView(_ tableViewTest: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 
    let task = tasks[indexPath.row] 
    cell.textLabel?.text = task.name! 
    return cell 
} 

func getData() { 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    do { 
     tasks = try context.fetch(Task.fetchRequest()) 
    } 
    catch { 
     print("Fetch Error") 
    } 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

}

и это код для модального контроллера представления, в котором пользователь ввод информация будет сохранена в CoreData:

class popVCAdd: UIViewController { 

@IBOutlet weak var textField: UITextField! 
@IBOutlet weak var popViewAc: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    popViewAc.layer.cornerRadius = 20 
    popViewAc.layer.masksToBounds = true 

    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 
    textField.inputAccessoryView = toolbar 
    let keyboardDone = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(self.disappearKey)) 
    toolbar.setItems([keyboardDone], animated: false) 
} 

@IBAction func doneBtn(_ sender: Any) { 

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    let task = Task(context: context) 

    task.name = textField.text! 

    (UIApplication.shared.delegate as! AppDelegate).saveContext() 

} 

@IBAction func dismissPop(_ sender: Any) { 
    dismiss(animated: true, completion: nil) 
} 

    func disappearKey() { 
    view.endEditing(true) 

    } 

}

кто-нибудь знает, что случилось с я т?

+0

Это потому, что вы должны сохранить его в хранилище сохранения и получить его снова. После этого вам нужно перезагрузить данные таблицы. Я мог бы помочь, если вы поделитесь своим кодом, в котором вы делаете его в основных данных. –

+0

Очень просто, когда вы вводите новые данные в Core Data, вам нужно написать логику, на которую вы написали в ViewWillApper: getData() tableViewTest.reloadData() –

+0

Спасибо! Я сохранил его в постоянном хранилище с помощью кнопки добавления и сказал saveContext в UIButton. Это то, что вы имели в виду, сохраняя его в постоянном хранилище? И что сильно? Еще раз спасибо! –

ответ

0

Пожалуйста, измените вам ModalPresantaion стиль для Full Screen

См скриншоте ниже:

Select Segue First:

enter image description here

Change Its Presantation Style to Full Screen:

enter image description here

Я предлагаю вам выше изменений, потому что:

viewWillAppear вашего ViewController не вызывая после Dismissing от вашего popVCAdd контроллера.

 Смежные вопросы

  • Нет связанных вопросов^_^