我有一个带有表格的视图,在每个表格单元格上我可以添加一些数据,所以我把它放在模态中,实际上是另一个视图。在我的模态中,我有这个代码
@IBAction func closeModal(_ sender: Any) {
if let amountVal = amount.text {
if let amountInt = Int16(amountVal) {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let activity = Activity(context: context)
activity.created_at = Date() as NSDate
activity.amount = amountInt
countedObject?.addToActivities(activity)
do {
try context.save()
navigationController?.popViewController(animated: true)
} catch let error {
NSLog(error.localizedDescription)
}
}
}
dismiss(animated: true, completion: nil)
}
所以我更新核心数据实体并关闭模态,但在关闭模态后,第一个视图没有更新,因此它不会反映我在重新启动模拟器之前所做的更改。在我的第一个视图中,我有这个
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(_ animated: Bool) {
populateCountObjects()
}
这适用于简单的segue但不适用于modal,在这种情况下我应该使用什么?
答案 0 :(得分:0)
可见副本:duplicate
您需要使用具有专用方法的委托
protocol ModalDelegate {
func didCloseModal();
}
在模态控制器类中,创建ModalDelegate协议的实例。并致电' delegate.didCloseModal()
'在解雇之前
然后让您的父控制器实现ModalDelegate
协议
并实现像didCloseModal
viewDidAppear
答案 1 :(得分:0)
我猜你的viewDidAppear
方法不会再被调用。尝试使用NsNotification
通知你的第一个VC,如果上下文保存并重绘/刷新/重新加载...等你想要的。
答案 2 :(得分:0)
让系统为您完成工作。在这种情况下,您会在保存上下文时收到通知。
override func viewDidLoad() {
super.viewDidLoad()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let center = NotificationCenter.default
center.addObserver(self, selector: #selector(contextDidSave(_:)), name: .NSManagedObjectContextDidSave, object: context)
}
func contextDidSave(_ notification: Notification) {
populateCountObjects()
}
如果这对您不起作用,您可以随时降低,并在更改对象时收到通知。
override func viewDidLoad() {
super.viewDidLoad()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let center = NotificationCenter.default
center.addObserver(self, selector: #selector(contextObjectsDidChange(_:)), name: .NSManagedObjectContextObjectsDidChange, object: context)
}
func contextObjectsDidChange(_ notification: Notification) {
populateCountObjects()
}
答案 3 :(得分:0)
所以我以另一种方式做到了,我添加到ViewController这个
static var sharedInstace : ViewController?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ViewController.sharedInstace = self
}
和解雇方法后的模态
ViewController.sharedInstace?.didCloseModal()